diff --git a/radicle-cli/src/terminal/args.rs b/radicle-cli/src/terminal/args.rs index ece18463..c6b56ea4 100644 --- a/radicle-cli/src/terminal/args.rs +++ b/radicle-cli/src/terminal/args.rs @@ -2,6 +2,8 @@ use std::ffi::OsString; use std::str::FromStr; use anyhow::anyhow; +use radicle::crypto; +use radicle::prelude::Did; #[derive(thiserror::Error, Debug)] pub enum Error { @@ -71,3 +73,15 @@ pub fn finish(unparsed: Vec) -> anyhow::Result<()> { } Ok(()) } + +pub fn did(val: OsString) -> anyhow::Result { + let val = val.to_string_lossy(); + let Ok(peer) = Did::from_str(&val) else { + if crypto::PublicKey::from_str(&val).is_ok() { + return Err(anyhow!("expected DID, did you mean 'did:key:{val}'?")); + } else { + return Err(anyhow!("invalid DID '{}', expected 'did:key'", val)); + } + }; + Ok(peer) +}