From 2b5552546c6dc637aaa282a990083df8a4a0c0c0 Mon Sep 17 00:00:00 2001 From: Fintan Halpenny Date: Thu, 16 Feb 2023 13:21:09 +0000 Subject: [PATCH] cli: add rid function for Id parsing Adds helper for parsing the Id type in CLI arguments. Signed-off-by: Fintan Halpenny X-Clacks-Overhead: GNU Terry Pratchett --- radicle-cli/src/commands/checkout.rs | 5 +---- radicle-cli/src/commands/delegate.rs | 9 +-------- radicle-cli/src/commands/edit.rs | 9 +-------- radicle-cli/src/commands/rm.rs | 9 +-------- radicle-cli/src/terminal/args.rs | 7 ++++++- 5 files changed, 10 insertions(+), 29 deletions(-) diff --git a/radicle-cli/src/commands/checkout.rs b/radicle-cli/src/commands/checkout.rs index b9f2f46a..af7252d1 100644 --- a/radicle-cli/src/commands/checkout.rs +++ b/radicle-cli/src/commands/checkout.rs @@ -60,10 +60,7 @@ impl Args for Options { } } Value(val) if id.is_none() => { - let val = val.to_string_lossy(); - let val = Id::from_str(&val).context(format!("invalid id '{val}'"))?; - - id = Some(val); + id = Some(term::args::rid(&val)?); } _ => return Err(anyhow::anyhow!(arg.unexpected())), } diff --git a/radicle-cli/src/commands/delegate.rs b/radicle-cli/src/commands/delegate.rs index fc91a0d3..34ae4e8e 100644 --- a/radicle-cli/src/commands/delegate.rs +++ b/radicle-cli/src/commands/delegate.rs @@ -1,5 +1,4 @@ use std::ffi::OsString; -use std::str::FromStr; use anyhow::{anyhow, Context as _}; @@ -86,13 +85,7 @@ impl Args for Options { did = Some(term::args::did(&val)?); } Some(OperationName::List) => { - // TODO: create args::project_id function - let val = val.to_string_lossy(); - if let Ok(val) = Id::from_str(&val) { - id = Some(val); - } else { - return Err(anyhow!("invalid Project ID '{}'", val)); - } + id = Some(term::args::rid(&val)?); } None => continue, }, diff --git a/radicle-cli/src/commands/edit.rs b/radicle-cli/src/commands/edit.rs index c7ad5a40..bef43551 100644 --- a/radicle-cli/src/commands/edit.rs +++ b/radicle-cli/src/commands/edit.rs @@ -1,5 +1,4 @@ use std::ffi::OsString; -use std::str::FromStr; use anyhow::{anyhow, Context as _}; @@ -45,13 +44,7 @@ impl Args for Options { return Err(Error::Help.into()); } Value(val) if id.is_none() => { - let val = val.to_string_lossy(); - - if let Ok(val) = Id::from_str(&val) { - id = Some(val); - } else { - return Err(anyhow!("invalid ID '{}'", val)); - } + id = Some(term::args::rid(&val)?); } _ => return Err(anyhow::anyhow!(arg.unexpected())), } diff --git a/radicle-cli/src/commands/rm.rs b/radicle-cli/src/commands/rm.rs index 076dfb9f..05dd0ae7 100644 --- a/radicle-cli/src/commands/rm.rs +++ b/radicle-cli/src/commands/rm.rs @@ -1,6 +1,5 @@ use std::ffi::OsString; use std::fs; -use std::str::FromStr; use anyhow::anyhow; @@ -52,13 +51,7 @@ impl Args for Options { return Err(Error::Help.into()); } Value(val) if id.is_none() => { - let val = val.to_string_lossy(); - - if let Ok(val) = Id::from_str(&val) { - id = Some(val); - } else { - return Err(anyhow!("invalid ID '{}'", val)); - } + id = Some(term::args::rid(&val)?); } _ => return Err(anyhow::anyhow!(arg.unexpected())), } diff --git a/radicle-cli/src/terminal/args.rs b/radicle-cli/src/terminal/args.rs index 7329aeb0..ec1b7a12 100644 --- a/radicle-cli/src/terminal/args.rs +++ b/radicle-cli/src/terminal/args.rs @@ -3,7 +3,7 @@ use std::str::FromStr; use anyhow::anyhow; use radicle::crypto; -use radicle::prelude::Did; +use radicle::prelude::{Did, Id}; #[derive(thiserror::Error, Debug)] pub enum Error { @@ -85,3 +85,8 @@ pub fn did(val: &OsString) -> anyhow::Result { }; Ok(peer) } + +pub fn rid(val: &OsString) -> anyhow::Result { + let val = val.to_string_lossy(); + Id::from_str(&val).map_err(|_| anyhow!("invalid repository ID '{}'", val)) +}