From 7fdd207fd7d200885845f25fbe93d7856fda1d7a Mon Sep 17 00:00:00 2001 From: Nander Stabel Date: Fri, 10 May 2024 01:06:54 +0200 Subject: [PATCH] fix: fix `Deserialize` for `DidMethod` --- oid4vc-core/src/subject_syntax_type.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/oid4vc-core/src/subject_syntax_type.rs b/oid4vc-core/src/subject_syntax_type.rs index 98a05ba0..9640b4e1 100644 --- a/oid4vc-core/src/subject_syntax_type.rs +++ b/oid4vc-core/src/subject_syntax_type.rs @@ -1,5 +1,5 @@ use serde::{de::Error, Deserialize, Deserializer, Serialize}; -use serde_with::{DeserializeFromStr, SerializeDisplay}; +use serde_with::SerializeDisplay; use std::{fmt::Display, str::FromStr}; #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] @@ -69,7 +69,7 @@ pub mod serde_unit_variant { } } -#[derive(Debug, Clone, PartialEq, Eq, Hash, DeserializeFromStr, SerializeDisplay)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, SerializeDisplay)] pub struct DidMethod { method_name: String, namespace: Option, @@ -102,6 +102,18 @@ impl DidMethod { } } +impl<'de> Deserialize<'de> for DidMethod { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s: String = Deserialize::deserialize(deserializer)?; + DidMethod::from_str_with_namespace(&s) + .or_else(|_| DidMethod::from_str(&s)) + .map_err(D::Error::custom) + } +} + impl From for DidMethod { fn from(did: did_url::DID) -> Self { DidMethod {