From 6d61152a981f6d4568836458d8e566f7b991a9bc Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Thu, 24 Mar 2022 19:43:55 -0500 Subject: refactor: clean up main --- zoned/src/config.rs | 9 ++++++++- zoned/src/main.rs | 21 +++++++-------------- zoned/src/state.rs | 17 +++++++++++++---- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/zoned/src/config.rs b/zoned/src/config.rs index d889cce..f716971 100644 --- a/zoned/src/config.rs +++ b/zoned/src/config.rs @@ -1,6 +1,6 @@ use figment::Figment; use serde::{Deserialize, Serialize}; -use std::net::IpAddr; +use std::{net::{IpAddr, SocketAddr}}; use crate::{Error, Result}; @@ -31,6 +31,13 @@ impl TryFrom for Config { } } +impl From for SocketAddr { + fn from(val: Config) -> Self { + SocketAddr::from((val.ip_address, val.port)) + } +} + + #[cfg(test)] mod tests { use std::path::PathBuf; diff --git a/zoned/src/main.rs b/zoned/src/main.rs index f275e7a..8787a4a 100644 --- a/zoned/src/main.rs +++ b/zoned/src/main.rs @@ -4,8 +4,7 @@ use figment::{ providers::{Env, Format, Serialized, Toml}, Figment, }; -use std::{net::SocketAddr, sync::Arc}; -use tracing::info; +use tracing::{debug_span, info, Instrument}; use zoned::{build_routes, Config, State}; #[tokio::main] @@ -16,23 +15,17 @@ async fn main() -> Result<(), zoned::Error> { .merge(Toml::file(Env::var_or("ZONED_CONFIG", "/etc/zoned/Config.toml")).nested()) .merge(Env::prefixed("ZONED_")); - let config = match Config::try_from(figment) { - Ok(config) => config, - Err(err) => return Err(err), - }; + let config = Config::try_from(figment)?; - let addr = SocketAddr::from((config.ip_address, config.port)); - - let shared_state = match State::try_from(config) { - Ok(config) => Arc::new(config), - Err(err) => return Err(err), - }; + let shared_state = State::try_from(&config)?.into_arc(); let routes = build_routes().layer(Extension(shared_state)); - info!("listening on {}", addr); - axum::Server::bind(&addr) + 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) diff --git a/zoned/src/state.rs b/zoned/src/state.rs index 68ab0a6..4262a90 100644 --- a/zoned/src/state.rs +++ b/zoned/src/state.rs @@ -1,20 +1,29 @@ +use std::sync::Arc; + use zone_nspawn::NSpawn; use zone_zfs::ZFS; use crate::{Config, Error, Result}; +#[derive(Debug)] pub struct State { pub zfs: ZFS, pub nspawn: NSpawn, } -impl TryFrom for State { +impl TryFrom<&Config> for State { type Error = Error; - fn try_from(config: Config) -> Result { + fn try_from(val: &Config) -> Result { Ok(State { - zfs: zone_zfs::ZFS::custom(&config.zfs)?, - nspawn: zone_nspawn::NSpawn::custom(&config.nspawn)?, + zfs: zone_zfs::ZFS::custom(&val.zfs)?, + nspawn: zone_nspawn::NSpawn::custom(&val.nspawn)?, }) } } + +impl State { + pub fn into_arc(self) -> Arc { + self.into() + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2