logo-generator/src/main.rs

47 lines
1.4 KiB
Rust
Raw Normal View History

2023-09-10 12:16:33 +02:00
use axum::{http::Request, response::Response, routing::get, Router};
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;
mod text;
2023-03-11 21:44:17 +01:00
#[derive(Clone)]
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() {
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())
.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();
}