From 753c70115e9aa8ec3f31f831b24e1cc4e504c18a Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Wed, 31 May 2023 23:27:42 -0400 Subject: [PATCH] `Mint_Info` feilds as options --- src/serde_utils.rs | 35 +++++++++++++++++++++++++++++++++++ src/types.rs | 14 +++++++------- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/serde_utils.rs b/src/serde_utils.rs index 387ea66a..6e70a276 100644 --- a/src/serde_utils.rs +++ b/src/serde_utils.rs @@ -64,4 +64,39 @@ pub mod serde_public_key { let decoded = hex::decode(encoded).map_err(serde::de::Error::custom)?; PublicKey::from_sec1_bytes(&decoded).map_err(serde::de::Error::custom) } + + pub mod opt { + use k256::PublicKey; + use serde::{Deserialize, Deserializer}; + + pub fn serialize(pubkey: &Option, serializer: S) -> Result + where + S: serde::Serializer, + { + match pubkey { + Some(pubkey) => { + let encoded = hex::encode(pubkey.to_sec1_bytes()); + serializer.serialize_str(&encoded) + } + None => serializer.serialize_none(), + } + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let option_str: Option = Option::deserialize(deserializer)?; + + match option_str { + Some(encoded) => { + let bytes = hex::decode(encoded).map_err(serde::de::Error::custom)?; + let pubkey = + PublicKey::from_sec1_bytes(&bytes).map_err(serde::de::Error::custom)?; + Ok(Some(pubkey)) + } + None => Ok(None), + } + } + } } diff --git a/src/types.rs b/src/types.rs index f4a32a63..87c42fe3 100644 --- a/src/types.rs +++ b/src/types.rs @@ -270,22 +270,22 @@ impl<'de> Deserialize<'de> for MintVersion { #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct MintInfo { /// name of the mint and should be recognizable - pub name: String, + pub name: Option, /// hex pubkey of the mint - #[serde(with = "serde_utils::serde_public_key")] - pub pubkey: PublicKey, + #[serde(with = "serde_utils::serde_public_key::opt")] + pub pubkey: Option, /// implementation name and the version running - pub version: MintVersion, + pub version: Option, /// short description of the mint - pub description: String, + pub description: Option, /// long description - pub description_long: String, + pub description_long: Option, /// contact methods to reach the mint operator pub contact: Vec>, /// shows which NUTs the mint supports pub nuts: Vec, /// message of the day that the wallet must display to the user - pub motd: String, + pub motd: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]