cli: add did function for args parsing
Adds a standard for parsing the Did type for the CLI commands. It attempts to parse the Did type. If it fails then it checks if the operator passed a PublicKey and suggests using `did:key` instead. Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com> X-Clacks-Overhead: GNU Terry Pratchett
This commit is contained in:
parent
efe5ff6ddd
commit
b57a4606f6
|
|
@ -2,6 +2,8 @@ use std::ffi::OsString;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
|
use radicle::crypto;
|
||||||
|
use radicle::prelude::Did;
|
||||||
|
|
||||||
#[derive(thiserror::Error, Debug)]
|
#[derive(thiserror::Error, Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
|
|
@ -71,3 +73,15 @@ pub fn finish(unparsed: Vec<OsString>) -> anyhow::Result<()> {
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn did(val: OsString) -> anyhow::Result<Did> {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue