use std::{env::current_dir, process::exit}; use mingling::{ LazyInit, Program, macros::program_setup, setup::{ExitCodeSetup, GeneralRendererSetup, HelpFlagSetup, QuietFlagSetup}, }; use rola_cli::{ ThisProgram, locale, output::{ColorOutputSetup, EnvLoggerSetup}, res::{bucket::ResBucketWithoutProtocol, current_dir::ResCurrentDir, overwrite::ResOverwrite}, }; fn main() { let mut program = ThisProgram::new(); // Language locale::set_lang( program .pick_global_argument(["-L", "--lang"]) .unwrap_or(locale::current_locales()), ); // Version program.global_flag(["-v", "--version"], |_| { eprintln!("{}", include_str!("../../version.txt")); exit(0) }); // Resources program.with_resource(ResCurrentDir { cwd: current_dir().unwrap(), }); let overwrite = program.pick_global_flag("--overwrite"); program.with_resource(ResOverwrite { overwrite }); // LazyResources program.with_resource(ResBucketWithoutProtocol::lazy_default()); // Setup program.with_setup(GeneralRendererSetup); program.with_setup(HelpFlagSetup::new(["-h", "--help"])); program.with_setup(StandardOutputSetup); program.with_setup(ExitCodeSetup::default()); program.with_setup(ColorOutputSetup); // stdout/stderr control let quiet = program.stdout_setting.quiet; let error_output = program.stdout_setting.error_output && !quiet; let render_output = program.stdout_setting.render_output && !quiet; if error_output { program.with_setup(EnvLoggerSetup); } // Execute 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; }); }