Gunnar

nordisk/holger-egui

holger-egui-build-thing/src/main.rs

//! `holger-egui-build-thing [--list | toml | emit]` — say what the declaration IS,
//! or write it.
//!
//! Repository tooling, never shipped. It owns no build knowledge: it reads
//! [`HolgerEguiBuildThing::variants`]. Building goes through the declared door,
//! never through this binary.

use std::process::ExitCode;

use holger_egui_build_thing::{
    emitted_toml, repo_root, write_emitted, BuildThingTrait, HolgerEguiBuildThing,
};

fn main() -> ExitCode {
    match std::env::args().nth(1).as_deref() {
        Some("--list") => {
            for v in &HolgerEguiBuildThing.variants().variants {
                println!("{:<14} {}", v.name, v.command_line());
            }
            ExitCode::SUCCESS
        }
        Some("toml") => match emitted_toml() {
            Ok(t) => {
                print!("{t}");
                ExitCode::SUCCESS
            }
            Err(e) => {
                eprintln!("holger-egui-build-thing: {e:#}");
                ExitCode::FAILURE
            }
        },
        Some("emit") => match write_emitted(&repo_root()) {
            Ok(p) => {
                println!("wrote {}", p.display());
                ExitCode::SUCCESS
            }
            Err(e) => {
                eprintln!("holger-egui-build-thing: {e:#}");
                ExitCode::FAILURE
            }
        },
        _ => {
            eprintln!("usage: holger-egui-build-thing --list | toml | emit");
            ExitCode::from(2)
        }
    }
}