use capns::{CapRegistry, CapUrn, Cap, validate_cap_canonical};
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Capns Registry Example");
let registry = CapRegistry::new().await?;
let cap_urn = "cap:op=extract;target=metadata";
println!("\nGetting cap from registry: {}", cap_urn);
let cap = registry.get_cap(cap_urn).await?;
println!("✓ Successfully retrieved cap:");
println!(" URN: {}", cap.urn_string());
println!(" Command: {}", cap.command);
if let Some(desc) = &cap.cap_description {
println!(" Description: {}", desc);
}
println!("\nValidating local cap against registry...");
let test_urn = CapUrn::from_string(cap_urn)?;
let local_cap = Cap::new(test_urn, "Test Cap".to_string(), "test-command".to_string());
match validate_cap_canonical(®istry, &local_cap).await {
Ok(_) => println!("✓ Local cap is valid"),
Err(e) => println!("✗ Local cap validation failed: {}", e),
}
println!("\nGetting multiple caps...");
let cap_urns = ["cap:op=extract;target=metadata", "cap:op=generate;target=thumbnail"];
let caps = registry.get_caps(&cap_urns).await?;
println!("✓ Successfully retrieved {} caps", caps.len());
for cap in caps {
println!(" - {}", cap.urn_string());
}
println!("\nChecking cached caps...");
let cached_caps = registry.get_cached_caps().await?;
println!("✓ Found {} cached caps", cached_caps.len());
for cap in cached_caps {
println!(" - {}", cap.urn_string());
}
println!("\nDone!");
Ok(())
}