rep-grep 0.0.8

wgrep/write-grep CLI
mod cli;
mod edit;
mod error;
mod input;
mod less;
mod output;
mod patcher;
pub(crate) mod replacer;
pub(crate) mod utils;
mod writer;

pub(crate) use self::input::App;
pub(crate) use error::Result;
use replacer::Replacer;
use std::env;
use std::io::IsTerminal;
use std::process;

fn main() -> Result<()> {
    use clap::Parser;
    let options = cli::Options::parse();

    let is_tty = std::io::stdout().is_terminal();
    let color = if options.color {
        true
    } else if options.no_color {
        false
    } else {
        is_tty
    };

    let pager = env::var("REP_PAGER").ok();

    match (options.find, options.replace_with) {
        (Some(find), Some(replace_with)) => {
            App::new(Some(Replacer::new(
                find,
                replace_with,
                options.literal_mode,
                options.flags,
                options.replacements,
            )?))
            .run(!options.write, options.delete, color, options.stdout, pager)?;
        }
        (None, None) => {
            App::new(None).run(!options.write, options.delete, color, options.stdout, pager)?;
        }
        (Some(_), None) => {
            eprintln!("Error: missing replacement argument. Usage: rep <find> <replace>");
            process::exit(1);
        }
        (None, Some(_)) => {
            eprintln!("Error: missing search argument. Usage: rep <find> <replace>");
            process::exit(1);
        }
    }

    process::exit(0);
}