dbnest 0.1.2

dbnest CLI – cozy local databases in seconds
mod cli;
mod output;

use clap::Parser;
use cli::{Cmd, Root};
use output::{print_error, print_instance, print_instances};

fn main() {
    let root = Root::parse();
    let json = root.json;

    if let Err(e) = run(root) {
        print_error(&e, json);
        std::process::exit(1);
    }
}

fn run(root: Root) -> dbnest_core::Result<()> {
    match root.cmd {
        Cmd::Up(args) => {
            let show_secrets = args.show_secrets;
            let inst = args.run()?;
            print_instance(&inst, root.json, show_secrets);
        }
        Cmd::Ls(args) => {
            let show_secrets = args.show_secrets;
            let list = args.run()?;
            print_instances(&list, root.json, show_secrets);
        }
        Cmd::Stop(args) => {
            let id = args.id.clone();
            args.run()?;
            output::print_ok(root.json, "stop", Some(&id));
        }
        Cmd::Rm(args) => {
            let id = args.id.clone();
            args.run()?;
            output::print_ok(root.json, "rm", Some(&id));
        }
        Cmd::Start(args) => {
            let id = args.id.clone();
            args.run()?;
            output::print_ok(root.json, "start", Some(&id));
        }
        Cmd::Restart(args) => {
            let id = args.id.clone();
            args.run()?;
            output::print_ok(root.json, "restart", Some(&id));
        }
        Cmd::Apply(args) => {
            let id = args.id.clone();
            args.run()?;
            output::print_ok(root.json, "apply", Some(&id));
        }
        Cmd::Plan(args) => {
            let plan = args.run()?;
            if root.json {
                println!("{}", serde_json::to_string_pretty(&plan).unwrap());
            } else {
                for s in plan.statements {
                    println!("{s}\n");
                }
            }
        }
        Cmd::Status(args) => {
            let res = args.run()?; // StatusResult, not Result
            output::print_status(root.json, res);
        }
    }

    Ok(())
}