use std::{env::current_dir, process::exit}; use mingling::{ Program, macros::program_setup, setup::{BasicProgramSetup, ExitCodeSetup, QuietFlagSetup}, }; use rola_cli::{ThisProgram, locale, res::current_dir::ResCurrentDir}; fn main() { let mut program = ThisProgram::new(); program.global_flag(["-v", "--version"], |_| { let help = locale::helps::Basic::help().trim(); eprintln!("{}", help); exit(0) }); // Language locale::set_lang( program .pick_global_argument(["-L", "--lang"]) .unwrap_or(locale::current_locales()), ); // Resources program.with_resource(ResCurrentDir { cwd: current_dir().unwrap(), }); // Setup program.with_setup(StandardOutputSetup); program.with_setup(BasicProgramSetup); program.with_setup(ExitCodeSetup::default()); // Execute let quiet = program.stdout_setting.quiet; let error_output = program.stdout_setting.error_output && !quiet; let render_output = program.stdout_setting.render_output && !quiet; let result = program.exec_without_render().unwrap(); if !result.is_empty() { if result.exit_code == 0 && render_output { println!("{}", result.trim()); } else if error_output { eprintln!("{}", result.trim()); } } exit(result.exit_code); } #[program_setup] fn standard_output_setup(program: &mut Program) { program.with_setup(QuietFlagSetup::new("--silence")); program.global_flag(["--no-error"], |program| { program.stdout_setting.error_output = false; }); program.global_flag(["--no-result"], |program| { program.stdout_setting.render_output = false; }); program.global_flag(["--silence", "--quiet"], |program| { program.stdout_setting.quiet = true; }); }