Skip to content

Commit

Permalink
Refactor: reuse parse_numalgo to avoid duplication
Browse files Browse the repository at this point in the history
Signed-off-by: Patrik Stas <patrik.stas@absa.africa>
  • Loading branch information
Patrik-Stas committed Oct 19, 2023
1 parent 3f1045c commit 7106f81
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 17 deletions.
18 changes: 12 additions & 6 deletions did_peer/src/peer_did/numalgos/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,23 @@ pub enum NumalgoKind {
DidShortening(Numalgo3),
}

impl Display for NumalgoKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
impl NumalgoKind {
pub fn to_char(&self) -> char {
match self {
NumalgoKind::InceptionKeyWithoutDoc(_) => Numalgo0::NUMALGO_CHAR.fmt(f),
NumalgoKind::GenesisDoc(_) => Numalgo1::NUMALGO_CHAR.fmt(f),
NumalgoKind::MultipleInceptionKeys(_) => Numalgo2::NUMALGO_CHAR.fmt(f),
NumalgoKind::DidShortening(_) => Numalgo3::NUMALGO_CHAR.fmt(f),
NumalgoKind::InceptionKeyWithoutDoc(_) => Numalgo0::NUMALGO_CHAR,
NumalgoKind::GenesisDoc(_) => Numalgo1::NUMALGO_CHAR,
NumalgoKind::MultipleInceptionKeys(_) => Numalgo2::NUMALGO_CHAR,
NumalgoKind::DidShortening(_) => Numalgo3::NUMALGO_CHAR,
}
}
}

impl Display for NumalgoKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.to_char().fmt(f)
}
}

impl TryFrom<char> for NumalgoKind {
type Error = DidPeerError;

Expand Down
13 changes: 2 additions & 11 deletions did_peer/src/peer_did/numalgos/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use did_parser::Did;
use super::numalgo3::Numalgo3;
use crate::{
error::DidPeerError,
peer_did::{validate::validate, PeerDid},
peer_did::{parse::parse_numalgo, validate::validate, PeerDid},
peer_did_resolver::options::PublicKeyEncoding,
};

Expand All @@ -18,20 +18,11 @@ pub trait Numalgo: Sized + Default {
<Did as TryFrom<T>>::Error: Into<DidPeerError>,
{
let did: Did = did.try_into().map_err(Into::into)?;

let numalgo_char = did.id().chars().next().ok_or_else(|| {
DidPeerError::DidValidationError(format!(
"Invalid did: unable to read numalgo character in did {}",
did.did()
))
})?;

let numalgo_char = parse_numalgo(&did)?.to_char();
if numalgo_char != Self::NUMALGO_CHAR {
return Err(DidPeerError::InvalidNumalgoCharacter(numalgo_char));
}

validate(&did)?;

Ok(PeerDid::from_parts(did, Self::default()))
}
}
Expand Down

0 comments on commit 7106f81

Please sign in to comment.