use mingling::{Program, hook::ProgramHook, macros::program_setup}; use shared_functions::info; use crate::{ ThisProgram, output::{ ansi_control::disable_ansi, env_logger::{EnvLogger, init_envlogger}, }, }; #[program_setup] pub fn color_output_setup(program: &mut Program) { program.global_flag("--no-color", |_| { disable_ansi(); }); } #[program_setup] pub fn env_logger_setup(program: &mut Program) { program.stdout_setting.verbose = program.pick_global_flag(["-V", "--verbose"]); let log_show_time = program.pick_global_flag("--log-time"); let log_level = program .pick_global_argument("--log-level") .unwrap_or("info".to_string()); if program.stdout_setting.verbose { init_envlogger(EnvLogger { show_time: log_show_time, show_level: log_level.as_str() != "disable", level: match log_level.as_str() { "trace" => log::Level::Trace, "debug" => log::Level::Debug, "warn" => log::Level::Warn, "error" => log::Level::Error, _ => log::Level::Info, }, }); // Add Hook program.with_hook( ProgramHook::::empty() .on_begin(|| info!("[INFO] Program is begin")) .on_pre_dispatch(|args| info!("[INFO] Pre dispatch: {args:?}")) .on_post_dispatch(|c: &_| info!("[INFO] Post dispatch: {c:?}")) .on_pre_chain(|c: &_, _| { info!("[INFO] Pre chain: {c}"); }) .on_post_chain(|any_output| info!("[INFO] Post chain: {}", any_output.member_id)) .on_pre_render(|c: &_, _| info!("[INFO] Pre render: {c}")) .on_post_render(|_| info!("[INFO] Post render")), ); } info!("Verbose mode enabled!"); }