starchart/src/main.rs

57 lines
1.8 KiB
Rust

use aide::{axum::ApiRouter, openapi::OpenApi};
use axum::Extension;
use std::{
net::{Ipv4Addr, SocketAddr},
sync::Arc,
};
use tracing::info;
use tracing_subscriber::fmt::SubscriberBuilder;
pub mod config;
pub mod db;
pub mod docs;
pub mod extractors;
mod frontend;
pub mod stars;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
SubscriberBuilder::default().pretty().init();
info!("running migrations! please wait...");
sqlx::migrate!("./migrations").run(db::pool().await).await?;
info!("migrations done! 😎");
start_server().await?;
Ok(())
}
async fn generate_server() -> Result<axum::Router, Box<dyn std::error::Error>> {
aide::gen::on_error(|error| panic!("{}", error));
aide::gen::extract_schemas(true);
let mut open_api = OpenApi::default();
aide::gen::on_error(|error| panic!("{}", error));
Ok(ApiRouter::new()
.nest_api_service("/api/v1/stars", stars::routes())
.nest_api_service("/docs", docs::routes())
.nest_api_service("/", frontend::routes())
.finish_api_with(&mut open_api, |docs| {
docs.title("starchart")
.summary("now you can discover a star!")
.contact(aide::openapi::Contact {
name: Some("zoe".into()),
url: Some("https://zoe.kittycat.homes".into()),
..Default::default()
})
.version("0.1.0")
})
.layer(Extension(Arc::new(open_api))))
}
async fn start_server() -> Result<(), Box<dyn std::error::Error>> {
let app = generate_server().await?;
let addr = SocketAddr::new(std::net::IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 7056);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await?;
Ok(())
}