use crate::api::DiscourseClient;
use crate::cli::ListFormat;
use crate::commands::common::{emit_result, ensure_api_credentials, select_discourse};
use crate::config::Config;
use anyhow::Result;
use serde_json::json;
pub fn version(config: &Config, discourse: Option<&str>, format: ListFormat) -> Result<()> {
match discourse {
Some(name) => forum_version(config, name, format),
None => {
let ver = env!("CARGO_PKG_VERSION");
emit_result(format, &json!({ "name": "dsc", "version": ver }), ver)
}
}
}
pub fn forum_version(config: &Config, discourse_name: &str, format: ListFormat) -> Result<()> {
let discourse = select_discourse(config, Some(discourse_name))?;
ensure_api_credentials(discourse)?;
let client = DiscourseClient::new(discourse)?;
let info = client.fetch_version_info()?;
let version = info.version.as_deref().unwrap_or("(unknown)");
let commit = info.commit.as_deref().unwrap_or("(unknown)");
let text = format!("{}: Discourse {} ({})", discourse.name, version, commit);
emit_result(
format,
&json!({ "discourse": discourse.name, "version": version, "commit": commit }),
&text,
)
}