2023-09-10 12:16:33 +02:00
|
|
|
use axum::{http::Request, response::Response, routing::get, Router};
|
2023-04-23 17:16:25 +02:00
|
|
|
use std::{net::SocketAddr, time::Duration};
|
|
|
|
use text::EmbeddedFonts;
|
|
|
|
use tower_http::{catch_panic::CatchPanicLayer, trace::TraceLayer};
|
|
|
|
use tracing::Span;
|
2023-03-11 21:08:09 +01:00
|
|
|
|
2023-03-11 22:45:14 +01:00
|
|
|
mod color;
|
2023-03-11 21:44:17 +01:00
|
|
|
mod polygon;
|
|
|
|
mod routes;
|
2023-04-23 17:16:25 +02:00
|
|
|
mod text;
|
2023-03-11 21:44:17 +01:00
|
|
|
|
|
|
|
#[derive(Clone)]
|
2023-04-23 17:16:25 +02:00
|
|
|
pub struct SharedState {
|
|
|
|
fonts: EmbeddedFonts,
|
|
|
|
}
|
2023-03-11 21:44:17 +01:00
|
|
|
|
2023-03-11 21:08:09 +01:00
|
|
|
#[tokio::main]
|
|
|
|
async fn main() {
|
2023-04-23 17:16:25 +02:00
|
|
|
let state = SharedState {
|
|
|
|
fonts: EmbeddedFonts::load(),
|
|
|
|
};
|
2023-03-11 21:44:17 +01:00
|
|
|
let app = Router::new()
|
2023-03-11 22:45:14 +01:00
|
|
|
.nest("/", routes::static_files::routes())
|
2023-09-10 12:16:33 +02:00
|
|
|
.route("/logo.png", get(routes::logo::png))
|
|
|
|
.route("/logo.svg", get(routes::logo::svg))
|
2023-03-11 21:44:17 +01:00
|
|
|
.nest("/favicon.ico", routes::favicon::routes())
|
2023-04-23 17:16:25 +02:00
|
|
|
.layer(
|
|
|
|
TraceLayer::new_for_http()
|
|
|
|
.on_request(|request: &Request<_>, _span: &Span| {
|
|
|
|
println!("Request {} {}", request.method(), request.uri());
|
|
|
|
})
|
|
|
|
.on_response(|response: &Response, latency: Duration, _span: &Span| {
|
|
|
|
println!("Response {}, {}ms", response.status(), latency.as_millis());
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
.layer(CatchPanicLayer::new())
|
2023-03-11 21:44:17 +01:00
|
|
|
.with_state(state);
|
2023-03-11 21:08:09 +01:00
|
|
|
|
|
|
|
// run it
|
2023-03-12 00:04:47 +01:00
|
|
|
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
|
2023-03-11 21:08:09 +01:00
|
|
|
println!("listening on {}", addr);
|
|
|
|
axum::Server::bind(&addr)
|
|
|
|
.serve(app.into_make_service())
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
}
|