use ajj::Router;
use init4_bin_base::{
utils::{from_env::FromEnv, metrics::MetricsConfig, tracing::TracingConfig},
Init4Config,
};
#[derive(Debug, FromEnv)]
struct Config {
tracing: TracingConfig,
metrics: MetricsConfig,
}
impl Init4Config for Config {
fn tracing(&self) -> &TracingConfig {
&self.tracing
}
fn metrics(&self) -> &MetricsConfig {
&self.metrics
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let _config_and_guard = init4_bin_base::init::<Config>()?;
let router = Router::<()>::new()
.route("helloWorld", || async {
tracing::info!("serving hello world");
Ok::<_, ()>("Hello, world!")
})
.route("addNumbers", |(a, b): (u32, u32)| async move {
tracing::info!("serving addNumbers");
Ok::<_, ()>(a + b)
})
.into_axum("/rpc");
let listener = tokio::net::TcpListener::bind("localhost:8080")
.await
.unwrap();
axum::serve(listener, router).await.unwrap();
Ok(())
}