injm 1.0.1

A CLI tool that injects content into marked regions in source files.
use std::fs;

use crate::{
    cli::{GlobalArgs, InjectArgs, RootArgs},
    cmd::inject,
    config::load_config,
};
use anyhow::{Result, anyhow};

pub fn run(args: RootArgs, mut global_args: GlobalArgs) -> Result<()> {
    let config_path = match &global_args.config {
        Some(cfg) => Some(cfg.to_owned()),
        None => {
            let cwd = std::env::current_dir()?;
            let path = cwd.join("injm.toml");
            if fs::exists(&path)? {
                Some(path)
            } else {
                return Err(anyhow!("config file is missing"));
            }
        }
    };

    global_args.config = config_path.clone();
    let cfg = load_config(config_path)?;

    if cfg.input.is_empty() {
        return Err(anyhow!("input source is empty"));
    }

    inject::run(
        InjectArgs {
            input: cfg.input,
            output: cfg.output,
            dry_run: args.dry_run,
            diff: args.diff,
            id: vec![],
        },
        global_args,
    )?;

    Ok(())
}