use std::process::ExitCode;
use anyhow::Result;
use clap::Args;
use colored::Colorize;
use serde::Serialize;
use crate::value_formatter::{ValueFormat, emit_structured};
#[derive(Args, Debug, Clone)]
pub(crate) struct VersionArgs {
#[arg(long, default_value = "pretty")]
pub format: String,
}
#[derive(Debug, Clone, Serialize)]
pub(crate) struct VersionInfo {
pub version: String,
pub commit: String,
pub target: String,
}
pub(crate) fn run(args: &VersionArgs) -> Result<ExitCode> {
let info = VersionInfo {
version: env!("CARGO_PKG_VERSION").to_string(),
commit: option_env!("ASTRID_GIT_COMMIT")
.unwrap_or("unknown")
.to_string(),
target: format!("{}-{}", std::env::consts::ARCH, std::env::consts::OS),
};
let format = ValueFormat::parse(&args.format);
if !format.is_pretty() {
emit_structured(&info, format)?;
return Ok(ExitCode::SUCCESS);
}
println!("{} {}", "astrid".bold(), info.version.cyan());
println!(" commit: {}", info.commit);
println!(" target: {}", info.target);
Ok(ExitCode::SUCCESS)
}