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()?; output::print_status(root.json, res);
}
}
Ok(())
}