bilingual 0.1.3

A cmdline tool used for markdown translation via calling Chinese translation api cloud services.
Documentation
use anyhow::Result;
use bilingual::md;
#[macro_use]
extern crate log;

mod cmd;
mod config;

#[cfg(test)]
mod tests;

fn main() -> Result<()> {
    log_init()?;
    let mut config = argh::from_env::<cmd::Bilingual>().run()?;
    debug!("\n{:#?}", config);

    while let Some(output) = config.do_single_query_write() {
        log::trace!("{:?}", output);
    }

    Ok(())
}

#[rustfmt::skip]
fn log_init() -> Result<()> {
    use simplelog::*;
    use std::env::var;

    let (term, file) = if let Ok(ref s) = var("LOG") {
        (s.parse().unwrap_or(LevelFilter::Warn),
         s.parse().unwrap_or(LevelFilter::Off))
    } else {
        (var("TERM_LOG").ok().and_then(|s| s.parse().ok()).unwrap_or(LevelFilter::Warn),
         var("FILE_LOG").ok().and_then(|s| s.parse().ok()).unwrap_or(LevelFilter::Off))
    };
    let logf = var("FILE").unwrap_or("bilingual.log".into());
    let info = format!("log-level: term => {term}, file => {file}; log-file => {logf}");
    let mut config = ConfigBuilder::default();
    config.set_time_offset_to_local().map_err(|_| anyhow::anyhow!("simplelog 无法确定 time offset 来获取本地时间"))?;
    let config_term = config.clone().set_time_level(LevelFilter::Debug).build();

    let logger: Vec<Box<dyn SharedLogger>> = if file != LevelFilter::Off {
        vec![TermLogger::new(term, config_term, TerminalMode::Mixed, ColorChoice::Auto),
             WriteLogger::new(file, config.build(), std::fs::File::create(logf)?)]
    } else {
        vec![TermLogger::new(term, config_term, TerminalMode::Mixed, ColorChoice::Auto)]
    };
    CombinedLogger::init(logger).map(|_| log::info!("{}", info)).map_err(|e| e.into())
}