From 26be51ae6832320490e317a0c895acd6a0487d81 Mon Sep 17 00:00:00 2001 From: "Z. Charles Dziura" Date: Fri, 25 Jul 2025 06:24:01 -0400 Subject: [PATCH] Starting the config service --- api/Cargo.toml | 5 +++-- api/src/main.rs | 6 +++--- api/src/services/config/error.rs | 13 +++++++++++++ api/src/services/config/mod.rs | 5 +++++ api/src/services/config/service.rs | 29 +++++++++++++++++++++++++++++ api/src/services/mod.rs | 1 + 6 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 api/src/services/config/error.rs create mode 100644 api/src/services/config/mod.rs create mode 100644 api/src/services/config/service.rs create mode 100644 api/src/services/mod.rs diff --git a/api/Cargo.toml b/api/Cargo.toml index cd663d2..02b35c5 100644 --- a/api/Cargo.toml +++ b/api/Cargo.toml @@ -12,7 +12,7 @@ axum = { version = "0.8", features = [ ] } base64 = "0.22" blake3 = { version = "1.5", features = ["serde"] } -deadpool-redis = { version = "0.21", features = ["serde"] } +deadpool-redis = { version = "0.22", features = ["serde"] } futures = "0.3" http = "1.0" humantime = "2.1" @@ -32,6 +32,7 @@ rust_decimal = "1.36" serde = { version = "1.0", features = ["derive", "rc", "std"] } serde_json = "1.0" serde_with = "3.9" +snafu = { version = "0.8.6", features = ["futures"] } sqlx = { version = "0.8", features = [ "default", "time", @@ -42,7 +43,7 @@ sqlx = { version = "0.8", features = [ ] } time = { version = "0.3", features = ["formatting", "macros"] } tokio = { version = "1.35", features = ["full"] } -toml = "0.8" +toml = "0.9" tower = "0.5" tower-http = { version = "0.6", features = ["full"] } tracing = "0.1.40" diff --git a/api/src/main.rs b/api/src/main.rs index e7a11a9..4db9e85 100644 --- a/api/src/main.rs +++ b/api/src/main.rs @@ -1,3 +1,3 @@ -fn main() { - println!("Hello, world!"); -} +mod services; + +fn main() {} diff --git a/api/src/services/config/error.rs b/api/src/services/config/error.rs new file mode 100644 index 0000000..b7d4a86 --- /dev/null +++ b/api/src/services/config/error.rs @@ -0,0 +1,13 @@ +use std::io::Error as IoError; + +use snafu::Snafu; +use toml::de::Error as TomlDeserializationError; + +#[derive(Debug, Snafu)] +pub enum ConfigError { + #[snafu(display("Could not open config file"), visibility(pub(in super)))] + OpenConfig { source: IoError }, + + #[snafu(display("Invalid config file"), visibility(pub(in super)))] + Format { source: TomlDeserializationError }, +} diff --git a/api/src/services/config/mod.rs b/api/src/services/config/mod.rs new file mode 100644 index 0000000..0688ee5 --- /dev/null +++ b/api/src/services/config/mod.rs @@ -0,0 +1,5 @@ +mod error; +mod service; + +pub use error::*; +pub use service::*; diff --git a/api/src/services/config/service.rs b/api/src/services/config/service.rs new file mode 100644 index 0000000..1bede01 --- /dev/null +++ b/api/src/services/config/service.rs @@ -0,0 +1,29 @@ +use std::{fs, path::Path}; + +use serde::Deserialize; +use snafu::ResultExt; + +use crate::services::config::{ConfigError, FormatSnafu, error::OpenConfigSnafu}; + +#[derive(Clone, Debug, Default, Deserialize)] +pub struct Config { + hostname: String, + port: String, +} + +impl Config { + pub fn _app_connection_uri(&self) -> String { + format!("{}:{}", self.hostname.as_str(), self.port.as_str()) + } +} + +impl TryFrom<&Path> for Config { + type Error = ConfigError; + + fn try_from(path: &Path) -> Result { + let buffer = fs::read_to_string(path).context(OpenConfigSnafu)?; + toml::from_str(buffer.as_str()).context(FormatSnafu) + } +} + +pub fn read_config() -> Result {} diff --git a/api/src/services/mod.rs b/api/src/services/mod.rs new file mode 100644 index 0000000..ef68c36 --- /dev/null +++ b/api/src/services/mod.rs @@ -0,0 +1 @@ +pub mod config;