aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--zoned/src/config.rs9
-rw-r--r--zoned/src/main.rs21
-rw-r--r--zoned/src/state.rs17
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