use hiccup::{SimUpdates, Simulation}; use serde::Deserialize; use std::fs; use axum::{ response::{Html, Json}, extract::Query, routing::get, Router, }; async fn root_get() -> Html { let head = " Hiccup "; let body = "
"; Html(format!("{head}{body}")) } async fn main_get() -> Html { Html(fs::read_to_string("front/main.js").unwrap()) } #[derive(Deserialize)] struct SimSpecs { principal: f64, i1: f64, years: u32, } async fn api_simulate_get<'a>(Query(specs): Query) -> Json> { 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)) .route("/main.js", get(main_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(); axum::serve(listener, app).await.unwrap(); }