diff options
Diffstat (limited to 'src/bin/web.rs')
-rw-r--r-- | src/bin/web.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/bin/web.rs b/src/bin/web.rs index 243e4a2..cc6b94f 100644 --- a/src/bin/web.rs +++ b/src/bin/web.rs @@ -1,7 +1,9 @@ +use hiccup::{SimUpdates, Simulation}; +use serde::Deserialize; use std::fs; use axum::{ - response::Html, + response::{Html, Json}, routing::get, Router, }; @@ -10,10 +12,26 @@ async fn root_get() -> Html<String> { Html(fs::read_to_string("front/index.html").unwrap()) } +#[derive(Deserialize)] +struct SimSpecs { + principal: f64, + i1: f64, + years: u32, +} + +async fn api_simulate_get<'a>(Json(specs): Json<SimSpecs>) -> Json<hiccup::Simulation<'a>> { + let mut sim = Simulation::new(specs.principal, specs.i1, specs.years); + let updates: SimUpdates = SimUpdates::default(); + sim.run(updates); + Json(sim) +} + #[tokio::main] async fn main() { // build our application with a single route - let app = Router::new().route("/", get(root_get)); + let app = Router::new() + .route("/", get(root_get)) + .route("/api/simulate", get(api_simulate_get)); // run our app with hyper, listening globally on port 3000 let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); |