use anyhow::{Context, Result};
use std::path::Path;
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const REPO_URL: &str = "https://github.com/tensorlogic/ipfrs";
#[allow(dead_code)]
pub fn generate_man_pages(cmd: &clap::Command, out_dir: &Path) -> Result<()> {
use clap_mangen::Man;
use std::fs;
fs::create_dir_all(out_dir).context("Failed to create output directory")?;
let man = Man::new(cmd.clone());
let mut buffer = Vec::new();
man.render(&mut buffer)
.context("Failed to render main man page")?;
let main_path = out_dir.join("ipfrs.1");
fs::write(&main_path, buffer).context("Failed to write main man page")?;
println!("Generated: {}", main_path.display());
for subcommand in cmd.get_subcommands() {
let name = subcommand.get_name();
let man = Man::new(subcommand.clone());
let mut buffer = Vec::new();
man.render(&mut buffer)
.with_context(|| format!("Failed to render man page for {}", name))?;
let path = out_dir.join(format!("ipfrs-{}.1", name));
fs::write(&path, buffer)
.with_context(|| format!("Failed to write man page for {}", name))?;
println!("Generated: {}", path.display());
}
Ok(())
}
pub async fn check_for_updates() -> Result<Option<String>> {
Ok(None)
}
#[allow(dead_code)]
fn is_newer_version(current_version: &str, new_version: &str) -> bool {
current_version < new_version
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[allow(clippy::len_zero)]
fn test_version_constant() {
assert!(VERSION.len() > 0);
assert!(VERSION.contains('.'));
}
#[test]
fn test_repo_url() {
assert!(REPO_URL.starts_with("https://"));
}
#[test]
fn test_is_newer_version() {
assert!(is_newer_version("0.1.0", "0.2.0"));
assert!(is_newer_version("0.1.0", "1.0.0"));
assert!(!is_newer_version("0.2.0", "0.1.0"));
assert!(!is_newer_version("1.0.0", "1.0.0"));
}
}