use hitchmark_core::LinkStore;
use std::path::PathBuf;
#[derive(clap::Parser)]
pub struct LinkArgs {
pub uri_a: String,
pub uri_b: String,
#[arg(long)]
pub note: Option<String>,
}
pub fn execute(args: LinkArgs, store_path: &PathBuf) -> anyhow::Result<()> {
let store = LinkStore::open(store_path)?;
let uri_a = expand_uri(&args.uri_a)?;
let uri_b = expand_uri(&args.uri_b)?;
match store.create_link(&uri_a, &uri_b, args.note.as_deref()) {
Ok(()) => {
println!("â Linked:");
println!(" {uri_a}");
println!(" {uri_b}");
if let Some(note) = args.note {
println!(" Note: {note}");
}
}
Err(hitchmark_core::Error::LinkAlreadyExists { .. }) => {
eprintln!("âšī¸ These resources are already linked.");
eprintln!(" {uri_a}");
eprintln!(" {uri_b}");
}
Err(e) => return Err(e.into()),
}
Ok(())
}
fn expand_uri(uri_or_path: &str) -> anyhow::Result<String> {
if uri_or_path.starts_with("hook://") {
Ok(uri_or_path.to_string())
} else {
let hook_uri = crate::path::path_to_uri(uri_or_path)?;
Ok(hook_uri.to_string())
}
}