From e6f62255cb378bdbae28b61d5e5e9b6172ea7984 Mon Sep 17 00:00:00 2001 From: George Kaklamanos Date: Thu, 30 Nov 2023 17:06:16 +0200 Subject: [PATCH] log: Initialize wrapper crate for using `Logging` implementations --- Cargo.toml | 1 + labadoor-log/Cargo.toml | 15 ++++++++++++ labadoor-log/src/lib.rs | 44 +++++++++++++++++++++++++++++++++++ labadoor-log/src/to_config.rs | 14 +++++++++++ labadoor/Cargo.toml | 7 +++--- labadoor/src/cli.rs | 2 ++ labadoor/src/main.rs | 2 ++ 7 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 labadoor-log/Cargo.toml create mode 100644 labadoor-log/src/lib.rs create mode 100644 labadoor-log/src/to_config.rs diff --git a/Cargo.toml b/Cargo.toml index 9bd6858..3baada8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,5 @@ members = [ "labadoor-open", "labadoor-acl", "labadoor-logging", + "labadoor-log", ] diff --git a/labadoor-log/Cargo.toml b/labadoor-log/Cargo.toml new file mode 100644 index 0000000..f94acfb --- /dev/null +++ b/labadoor-log/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "labadoor-log" +version = "0.1.0" +edition = "2021" + +[dependencies] +clap = { version = "4.4.10", features = ["derive"] } +config = "0.13.4" +serde = { version = "1.0.193", features = ["derive"] } +toml = "0.8.8" +labadoor-csv = { path = "../labadoor-csv", optional = true } +labadoor-logging = { path = "../labadoor-logging"} + +[features] +csv = ["dep:labadoor-csv"] diff --git a/labadoor-log/src/lib.rs b/labadoor-log/src/lib.rs new file mode 100644 index 0000000..a9da56b --- /dev/null +++ b/labadoor-log/src/lib.rs @@ -0,0 +1,44 @@ +pub mod cli; +mod to_config; +use crate::to_config::ToConfig; +use labadoor_logging::Logging; + +pub struct LogArgs { + pub username: String, + pub resource: String, + pub method: String, +} +macro_rules! add_cliargs { + ($d:ident,$section:expr,$i:ident) => { + $d.add_source(config::File::from_str( + &format!("[{}]\n{}", $section, toml::to_string($i).unwrap()), + config::FileFormat::Toml, + )) + .build() + .unwrap() + }; +} + +use config::{builder::DefaultState, ConfigBuilder}; +pub fn log(cli: &cli::Cli, config: ConfigBuilder) -> Result<(), ()> { + let mut ret = Err(()); + let config = add_cliargs!(config, "log", cli); + let backends = config.get::>("log.backends").unwrap(); + for backend in backends { + let logging = match backend { + #[cfg(feature = "csv")] + cli::Backend::CSV => config.get::("log.csv").unwrap().to_config().new(), + }; + match &cli.command { + cli::Command::Append(cliargs) => { + logging.append( + "time.new()".to_string(), + cliargs.username.clone(), + cliargs.resource.clone(), + cliargs.method.clone(), + ); + } + }; + } + ret +} diff --git a/labadoor-log/src/to_config.rs b/labadoor-log/src/to_config.rs new file mode 100644 index 0000000..573f928 --- /dev/null +++ b/labadoor-log/src/to_config.rs @@ -0,0 +1,14 @@ +use crate::cli::CSV; + +pub trait ToConfig { + fn to_config(&self) -> T; +} + +#[cfg(feature = "csv")] +impl ToConfig for CSV { + fn to_config(&self) -> labadoor_csv::CSVArgs { + labadoor_csv::CSVArgs { + path: self.path.clone(), + } + } +} diff --git a/labadoor/Cargo.toml b/labadoor/Cargo.toml index 0a40b5a..085dca1 100644 --- a/labadoor/Cargo.toml +++ b/labadoor/Cargo.toml @@ -7,10 +7,10 @@ edition = "2021" clap = { version = "4.3.10", features = ["derive"] } labadoor-telegram = { path = "../labadoor-telegram", optional = true } labadoor-matrix = { path = "../labadoor-matrix", optional = true } -labadoor-csv = { path = "../labadoor-csv", optional = true } labadoor-gpio = { path = "../labadoor-gpio", optional = true } labadoor-auth = { path = "../labadoor-auth", optional = true } -labadoor-acl = { path = "../labadoor-acl" } +labadoor-open = { path = "../labadoor-open", optional = true} +labadoor-log = { path = "../labadoor-log", optional = true} serde = { version = "1.0.164", features = ["derive"] } config = "0.13.3" toml = "0.8.8" @@ -18,6 +18,7 @@ toml = "0.8.8" [features] telegram = ["dep:labadoor-telegram"] matrix = ["dep:labadoor-matrix"] -csv = ["dep:labadoor-csv"] gpio = ["dep:labadoor-gpio"] auth = ["dep:labadoor-auth"] +open = ["dep:labadoor-open"] +log = ["dep:labadoor-log"] diff --git a/labadoor/src/cli.rs b/labadoor/src/cli.rs index 64e73fc..c724f02 100644 --- a/labadoor/src/cli.rs +++ b/labadoor/src/cli.rs @@ -17,6 +17,8 @@ pub enum Command { GPIO(GPIO), #[cfg(feature = "auth")] Auth(labadoor_auth::cli::Cli), + #[cfg(feature = "log")] + Log(labadoor_log::cli::Cli), #[cfg(feature = "open")] Open(Open), } diff --git a/labadoor/src/main.rs b/labadoor/src/main.rs index ddfdb21..d5d10f7 100644 --- a/labadoor/src/main.rs +++ b/labadoor/src/main.rs @@ -47,6 +47,8 @@ fn main() -> ExitCode { let open = config.get::("open").unwrap().to_config(); module_result = labadoor_open::open(open); } + #[cfg(feature = "log")] + cli::Command::Log(cli) => module_result = labadoor_log::log(&cli, config), #[cfg(feature = "auth")] cli::Command::Auth(cli) => module_result = labadoor_auth::auth(&cli, config), }