From b3368076e859cf3dbd4d7e5d36f7af235427936f Mon Sep 17 00:00:00 2001 From: fluo10 Date: Fri, 2 May 2025 08:57:43 +0900 Subject: [PATCH] Add dpts-config module --- Cargo.lock | 50 +++++++++++++++++++++++++++++++++++++-- Cargo.toml | 14 +++++++---- dpts-config/Cargo.toml | 18 ++++++++++++++ dpts-config/src/client.rs | 0 dpts-config/src/global.rs | 0 dpts-config/src/lib.rs | 9 +++++++ dpts-config/src/server.rs | 37 +++++++++++++++++++++++++++++ dpts-config/src/user.rs | 0 dpts-database/Cargo.toml | 2 +- dpts-error/Cargo.toml | 3 ++- dpts-error/src/lib.rs | 2 ++ dpts-error/src/main.rs | 3 --- 12 files changed, 126 insertions(+), 12 deletions(-) create mode 100644 dpts-config/Cargo.toml create mode 100644 dpts-config/src/client.rs create mode 100644 dpts-config/src/global.rs create mode 100644 dpts-config/src/lib.rs create mode 100644 dpts-config/src/server.rs create mode 100644 dpts-config/src/user.rs delete mode 100644 dpts-error/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index d6c5412..fd2198e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -774,6 +774,7 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" name = "dpts" version = "0.1.0" dependencies = [ + "dpts-config", "dpts-csv", "dpts-database", "dpts-entity", @@ -790,6 +791,17 @@ dependencies = [ "dpts", ] +[[package]] +name = "dpts-config" +version = "0.1.0" +dependencies = [ + "dpts-entity", + "dpts-error", + "serde", + "tokio", + "toml", +] + [[package]] name = "dpts-csv" version = "0.1.0" @@ -839,6 +851,7 @@ dependencies = [ "anyhow", "clap", "thiserror 2.0.12", + "toml", ] [[package]] @@ -2499,6 +2512,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3029,23 +3051,47 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + [[package]] name = "toml_datetime" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.22.25" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10558ed0bd2a1562e630926a2d1f0b98c827da99fabd3fe20920a59642504485" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", + "toml_write", "winnow", ] +[[package]] +name = "toml_write" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" + [[package]] name = "tower" version = "0.5.2" diff --git a/Cargo.toml b/Cargo.toml index 7d9b164..4457dd9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,17 +6,19 @@ license.workspace = true repository.workspace = true [dependencies] -dpts-csv = { workspace = true } -dpts-entity = { workspace = true } -dpts-error = { workspace = true } -dpts-migration = { workspace = true } -dpts-database = { workspace = true } +dpts-config.workspace = true +dpts-csv.workspace = true +dpts-entity.workspace = true +dpts-error.workspace = true +dpts-migration.workspace = true +dpts-database.workspace = true [workspace] members = [".", "dpts-*"] [workspace.dependencies] dpts = { path = "." } +dpts-config = { path = "dpts-config" } dpts-csv = { path = "dpts-csv" } dpts-database = { path = "dpts-database" } dpts-entity = { path = "dpts-entity" } @@ -26,6 +28,8 @@ chrono = {version = "0.4", features = ["serde"]} clap = "4.5" dotenv = "0.15.0" serde = { version = "1.0", features = ["derive"] } +tokio = "1.44.2" +toml = "0.8.22" [workspace.package] version = "0.1.0" diff --git a/dpts-config/Cargo.toml b/dpts-config/Cargo.toml new file mode 100644 index 0000000..b70c6eb --- /dev/null +++ b/dpts-config/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "dpts-config" +version.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true + +[features] +default = ["client", "server"] +client = [] +server = [] + +[dependencies] +dpts-entity.workspace = true +dpts-error.workspace = true +serde.workspace = true +tokio.workspace = true +toml.workspace = true diff --git a/dpts-config/src/client.rs b/dpts-config/src/client.rs new file mode 100644 index 0000000..e69de29 diff --git a/dpts-config/src/global.rs b/dpts-config/src/global.rs new file mode 100644 index 0000000..e69de29 diff --git a/dpts-config/src/lib.rs b/dpts-config/src/lib.rs new file mode 100644 index 0000000..43d2a5d --- /dev/null +++ b/dpts-config/src/lib.rs @@ -0,0 +1,9 @@ +mod client; +mod global; +mod server; +mod user; + +pub use server::{ + ServerConfig, + PartialServerConfig, +}; \ No newline at end of file diff --git a/dpts-config/src/server.rs b/dpts-config/src/server.rs new file mode 100644 index 0000000..f21c088 --- /dev/null +++ b/dpts-config/src/server.rs @@ -0,0 +1,37 @@ +use dpts_error::Error; +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize)] +pub struct ServerConfig { + pub listen_ips: Vec, + pub port: u16, + pub database_url: String +} + +#[derive(Deserialize)] + +pub struct PartialServerConfig { + pub listen_ips: Option>, + pub port: Option, + pub database_url: Option, +} + +impl PartialServerConfig { + /// #Examples + /// ``` + /// use dpts_config::PartialServerConfig; + /// let config = PartialServerConfig::try_from_toml(r#" + /// listen_ips = ["0.0.0.0"] + /// port = 8000 + /// database_url = "sqlite::memory:" + /// "#).unwrap(); + /// assert_eq!(config.listen_ips, Some(vec!["0.0.0.0".to_string()])); + /// assert_eq!(config.port, Some(8000)); + /// assert_eq!(config.database_url, Some("sqlite::memory:".to_string())); + /// ``` + /// + pub fn try_from_toml(s: &str) -> Result { + Ok(toml::from_str(s)?) + } +} + diff --git a/dpts-config/src/user.rs b/dpts-config/src/user.rs new file mode 100644 index 0000000..e69de29 diff --git a/dpts-database/Cargo.toml b/dpts-database/Cargo.toml index 1b06f4a..89627de 100644 --- a/dpts-database/Cargo.toml +++ b/dpts-database/Cargo.toml @@ -17,7 +17,7 @@ axum = "0.8" chrono = {workspace = true} dotenv = {workspace = true} log = "0.4.27" -tokio = "1.44.2" +tokio.workspace = true [dependencies.sea-orm] version = "1.1" diff --git a/dpts-error/Cargo.toml b/dpts-error/Cargo.toml index ca16ab2..7a8a754 100644 --- a/dpts-error/Cargo.toml +++ b/dpts-error/Cargo.toml @@ -8,4 +8,5 @@ repository.workspace = true [dependencies] anyhow = "1.0.98" thiserror = "2.0.12" -clap = { workspace = true } +clap.workspace = true +toml.workspace = true diff --git a/dpts-error/src/lib.rs b/dpts-error/src/lib.rs index 73b396d..0b889bc 100644 --- a/dpts-error/src/lib.rs +++ b/dpts-error/src/lib.rs @@ -6,6 +6,8 @@ pub enum Error { ParseIntError(#[from] std::num::ParseIntError), #[error("IO Error")] IoError(#[from] std::io::Error), + #[error("Parse toml error")] + TomlDe(#[from] toml::de::Error), } impl Error { diff --git a/dpts-error/src/main.rs b/dpts-error/src/main.rs deleted file mode 100644 index e7a11a9..0000000 --- a/dpts-error/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -}