diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..838b422 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,19 @@ +use figment::{ + providers::{Env, Format, Toml}, + Figment, +}; +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +pub struct Config { + pub meaning_of_life: String, +} + +impl Config { + pub fn load() -> Result { + Figment::new() + .merge(Toml::file("config.toml")) + .merge(Env::raw()) + .extract() + } +} diff --git a/src/main.rs b/src/main.rs index c82790d..9d16982 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,29 +1,16 @@ +mod config; mod tracing; use ::tracing::info; use eyre::Context; -use figment::{ - providers::{Env, Format, Toml}, - Figment, -}; -use serde::Deserialize; -use crate::tracing::set_up_tracing; - -#[derive(Deserialize)] -struct Config { - meaning_of_life: String, -} +use crate::{config::Config, tracing::set_up_tracing}; #[tokio::main] async fn main() -> eyre::Result<()> { set_up_tracing("rust_tokio_service_template").context("Failed to set up tracing")?; - let Config { meaning_of_life } = Figment::new() - .merge(Toml::file("config.toml")) - .merge(Env::raw()) - .extract() - .context("Failed to extract config")?; + let Config { meaning_of_life } = Config::load().context("Failed to load config")?; info!("The meaning of life is {meaning_of_life}");