blob: 8787a4ad0ba763be5ace53fbc4b7112007d07db3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
use anyhow::Context;
use axum::extract::Extension;
use figment::{
providers::{Env, Format, Serialized, Toml},
Figment,
};
use tracing::{debug_span, info, Instrument};
use zoned::{build_routes, Config, State};
#[tokio::main]
async fn main() -> Result<(), zoned::Error> {
tracing_subscriber::fmt::init();
let figment = Figment::from(Serialized::defaults(Config::default()))
.merge(Toml::file(Env::var_or("ZONED_CONFIG", "/etc/zoned/Config.toml")).nested())
.merge(Env::prefixed("ZONED_"));
let config = Config::try_from(figment)?;
let shared_state = State::try_from(&config)?.into_arc();
let routes = build_routes().layer(Extension(shared_state));
info!(ip_address = %config.ip_address, port = %config.port, "Server listening");
axum::Server::bind(&config.into())
.serve(routes.into_make_service())
.instrument(debug_span!("read_task").or_current())
.await
.context("Axum error")
.map_err(zoned::Error::from)
}
|