use crate::common::Execute;
use clap::Subcommand;
use std::error::Error;
use tabled::{builder::Builder, settings::Style};
#[derive(Subcommand, Debug)]
pub(crate) enum LoggerCommand {
#[clap(about = "List loggers")]
List {
#[clap(short, long, help = "Filter loggers by this")]
filter: Option<String>,
#[clap(short, long, help = "Order loggers by this")]
order_by: Option<String>,
},
}
impl Execute for LoggerCommand {
fn execute(&self, api: wikijs::Api) -> Result<(), Box<dyn Error>> {
match self {
LoggerCommand::List { filter, order_by } => {
logger_list(api, filter.to_owned(), order_by.to_owned())
}
}
}
}
fn logger_list(
api: wikijs::Api,
filter: Option<String>,
order_by: Option<String>,
) -> Result<(), Box<dyn Error>> {
let loggers = api.logger_list(filter, order_by)?;
let mut builder = Builder::new();
builder.push_record([
"is_enabled",
"key",
"title",
"level",
]);
for logger in loggers {
builder.push_record([
logger.is_enabled.to_string().as_str(),
logger.key.as_str(),
logger.title.as_str(),
logger.level.unwrap_or("".to_string()).as_str(),
]);
}
println!("{}", builder.build().with(Style::rounded()));
Ok(())
}