use std::io::Write as _;
use clap::{Parser, ValueEnum};
use martin::schemas::{config_doc_yaml, config_json_schema, openapi_spec};
#[derive(Copy, Clone, Debug, PartialEq, Eq, ValueEnum)]
#[clap(rename_all = "kebab-case")]
enum Target {
Config,
Openapi,
ConfigDoc,
}
#[derive(Debug, Parser)]
#[command(version, about)]
struct Args {
#[arg(long, value_enum)]
target: Target,
}
fn main() {
let args = Args::parse();
let mut stdout = std::io::stdout().lock();
match args.target {
Target::Config => {
let value = config_json_schema();
serde_json::to_writer_pretty(&mut stdout, &value).expect("stdout");
let _ = stdout.write_all(b"\n");
}
Target::Openapi => {
let value = openapi_spec();
serde_json::to_writer_pretty(&mut stdout, &value).expect("stdout");
let _ = stdout.write_all(b"\n");
}
Target::ConfigDoc => {
let _ = stdout.write_all(config_doc_yaml().as_bytes());
}
}
}