diff options
author | Toby Vincent <tobyv13@gmail.com> | 2022-03-24 19:43:55 -0500 |
---|---|---|
committer | Toby Vincent <tobyv13@gmail.com> | 2022-03-24 19:43:55 -0500 |
commit | 6d61152a981f6d4568836458d8e566f7b991a9bc (patch) | |
tree | d6cc7ea27d86cc735e2c4843bf5189af102da92c | |
parent | 252f607064e760b274fd1e9e83ea520573b9e2f6 (diff) |
refactor: clean up main
-rw-r--r-- | zoned/src/config.rs | 9 | ||||
-rw-r--r-- | zoned/src/main.rs | 21 | ||||
-rw-r--r-- | 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<Figment> for Config { } } +impl From<Config> 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<Config> for State { +impl TryFrom<&Config> for State { type Error = Error; - fn try_from(config: Config) -> Result<Self> { + fn try_from(val: &Config) -> Result<Self> { 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> { + self.into() + } +}
\ No newline at end of file |