cli/unfollow: Use common DID / NID argument parser

This commit is contained in:
Erik Kundt 2025-10-14 19:17:56 +02:00 committed by Fintan Halpenny
parent e488ddb446
commit deaf77e5b4
1 changed files with 3 additions and 19 deletions

View File

@ -1,9 +1,8 @@
use clap::Parser;
use thiserror::Error;
use radicle::node::NodeId;
use radicle::prelude::Did;
use crate::terminal as term;
pub(crate) const ABOUT: &str = "Unfollow a peer";
@ -11,26 +10,11 @@ const LONG_ABOUT: &str = r#"
The `unfollow` command takes a Node ID, optionally in DID format,
and removes the follow policy for that peer."#;
#[derive(Debug, Error)]
#[error("invalid Node ID specified (Node ID parsing failed with: '{nid}', DID parsing failed with: '{did}'))")]
struct NodeIdParseError {
did: radicle::identity::did::DidError,
nid: radicle::crypto::PublicKeyError,
}
fn parse_nid(value: &str) -> Result<NodeId, NodeIdParseError> {
value.parse::<Did>().map(NodeId::from).or_else(|did| {
value
.parse::<NodeId>()
.map_err(|nid| NodeIdParseError { nid, did })
})
}
#[derive(Debug, Parser)]
#[command(about = ABOUT, long_about = LONG_ABOUT, disable_version_flag = true)]
pub struct Args {
/// Node ID (optionally in DID format) of the peer to unfollow
#[arg(value_name = "NID", value_parser = parse_nid)]
#[arg(value_name = "NID", value_parser = term::args::parse_nid)]
pub(super) nid: NodeId,
/// Verbose output