From e488ddb446659b5efd7b59aa4991dc32c92b6c0a Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Tue, 14 Oct 2025 19:16:23 +0200 Subject: [PATCH] cli: Add common value parser for NID / DID --- crates/radicle-cli/src/terminal/args.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/crates/radicle-cli/src/terminal/args.rs b/crates/radicle-cli/src/terminal/args.rs index 19c697a0..3cb4993b 100644 --- a/crates/radicle-cli/src/terminal/args.rs +++ b/crates/radicle-cli/src/terminal/args.rs @@ -244,6 +244,21 @@ impl std::fmt::Display for BlockTarget { } } +#[derive(Debug, thiserror::Error)] +#[error("invalid Node ID specified (Node ID parsing failed with: '{nid}', DID parsing failed with: '{did}'))")] +pub(crate) struct NodeIdParseError { + did: radicle::identity::did::DidError, + nid: radicle::crypto::PublicKeyError, +} + +pub(crate) fn parse_nid(value: &str) -> Result { + value.parse::().map(NodeId::from).or_else(|did| { + value + .parse::() + .map_err(|nid| NodeIdParseError { nid, did }) + }) +} + #[derive(Clone, Debug)] pub(crate) struct ScopeParser;