use crate::cli::generate;
use std::path::PathBuf;
use usage::miette::IntoDiagnostic;
use usage::miette::Result;
#[derive(usage_rs::Args)]
#[usage(effect = "read")]
pub struct Json {
#[usage(short, long)]
file: Option<PathBuf>,
#[usage(long, required_unless = "--file", overrides = "--file")]
spec: Option<String>,
#[usage(long)]
view: Option<String>,
}
impl usage_rs::Run for Json {
type Output = Result<()>;
fn run(self) -> Self::Output {
let spec = generate::select_view(
generate::file_or_spec(&self.file, &self.spec)?,
self.view.as_deref(),
)?;
let json = serde_json::to_string_pretty(&spec).into_diagnostic()?;
println!("{json}");
Ok(())
}
}