rizzoo 0.6.7

a cross platform color generation tool implementing Material 3 Expressive
pub mod cache;
pub mod cli;
pub mod color;
pub mod config;
pub mod engine;
pub mod error;
pub mod export;
pub mod image;
pub mod paths;
pub mod template;
pub mod wallpaper;
pub mod watch;

use clap::Parser;

fn main() {
    env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
        .format_timestamp(None)
        .init();

    let cli = cli::Cli::parse();

    if cli.init || cli.init_overwrite {
        let paths = match paths::Paths::resolve() {
            Ok(p) => p,
            Err(e) => {
                log::error!("{e}");
                std::process::exit(1);
            }
        };
        if let Err(e) = paths.check_config(cli.init_overwrite) {
            log::error!("{e}");
            std::process::exit(1);
        }
        return;
    }

    let paths = match paths::Paths::resolve() {
        Ok(p) => {
            if let Err(e) = p.check_directory() {
                log::error!("{e}");
                std::process::exit(1);
            }
            p
        }
        Err(e) => {
            log::error!("{e}");
            std::process::exit(1);
        }
    };

    let config = config::Configuration::load(&paths.config_toml);
    let cli = config.merge(&cli);

    if let Err(e) = cli.validate() {
        eprintln!("\x1b[31merror\x1b[0m: {e}");
        std::process::exit(1);
    }

    if let Err(e) = run(cli, config) {
        log::error!("{e}");
        std::process::exit(1);
    }
}

fn run(cli: cli::Cli, config: config::Configuration) -> Result<(), error::LRatio> {
    let state = engine::State::new(cli, config)?;

    state.set_wallpaper()?;
    state.render_templates()?;
    state.write_outputs()?;
    state.preview()?;
    state.start_watch()?;

    Ok(())
}