1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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<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>(Query(specs): Query<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))
.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();
}
|