log: Initialize wrapper crate for using Logging implementations

This commit is contained in:
George Kaklamanos 2023-11-30 17:06:16 +02:00
parent cc958d3d93
commit e6f62255cb
No known key found for this signature in database
GPG key ID: C0CAB8A6BDC9399D
7 changed files with 82 additions and 3 deletions

View file

@ -10,4 +10,5 @@ members = [
"labadoor-open",
"labadoor-acl",
"labadoor-logging",
"labadoor-log",
]

15
labadoor-log/Cargo.toml Normal file
View file

@ -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"]

44
labadoor-log/src/lib.rs Normal file
View file

@ -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<DefaultState>) -> Result<(), ()> {
let mut ret = Err(());
let config = add_cliargs!(config, "log", cli);
let backends = config.get::<Vec<cli::Backend>>("log.backends").unwrap();
for backend in backends {
let logging = match backend {
#[cfg(feature = "csv")]
cli::Backend::CSV => config.get::<cli::CSV>("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
}

View file

@ -0,0 +1,14 @@
use crate::cli::CSV;
pub trait ToConfig<T> {
fn to_config(&self) -> T;
}
#[cfg(feature = "csv")]
impl ToConfig<labadoor_csv::CSVArgs> for CSV {
fn to_config(&self) -> labadoor_csv::CSVArgs {
labadoor_csv::CSVArgs {
path: self.path.clone(),
}
}
}

View file

@ -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"]

View file

@ -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),
}

View file

@ -47,6 +47,8 @@ fn main() -> ExitCode {
let open = config.get::<cli::Open>("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),
}