bonds-cli 0.1.1

CLI for creating and managing symlink-based bonds
Documentation
use bonds_core::{BondError, BondManager};

pub fn cmd_info(manager: &BondManager, id: &str) -> Result<(), BondError> {
    let bond = manager.get_bond(id)?;

    println!("Bond Details:");
    println!("  ID:      {}", bond.id());
    println!("  Source:  {}", bond.source().display());
    println!("  Target:  {}", bond.target().display());
    println!(
        "  Created: {}",
        bond.created_at().format("%Y-%m-%d %H:%M:%S UTC")
    );

    if let Some(meta) = bond.metadata() {
        println!("  Metadata:");
        for (k, v) in meta {
            println!("    {k}: {v}");
        }
    }

    let target_exists = bond.target().exists();
    let is_symlink = bond
        .target()
        .symlink_metadata()
        .map(|m| m.file_type().is_symlink())
        .unwrap_or(false);

    println!(
        "  Status:  {}",
        match (target_exists, is_symlink) {
            (true, true) => "healthy (symlink intact)",
            (true, false) => "warning: target exists but is not a symlink",
            (false, _) => "broken (target missing)",
        }
    );

    Ok(())
}