logo-generator/src/main.rs

48 lines
1.4 KiB
Rust

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;
use crate::routes::static_files;
mod color;
mod polygon;
mod routes;
mod text;
#[derive(Clone)]
pub struct SharedState {
fonts: EmbeddedFonts,
}
#[tokio::main]
async fn main() {
let state = SharedState {
fonts: EmbeddedFonts::load(),
};
let app = Router::new()
.fallback(static_files::router)
.route("/logo", get(routes::logo::png))
.route("/logo.png", get(routes::logo::png))
.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())
.with_state(state);
// run it
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
println!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}