//! Utilities for serde pub mod serde_url { use serde::Deserialize; use url::Url; pub fn serialize(url: &Url, serializer: S) -> Result where S: serde::Serializer, { serializer.serialize_str(url.as_ref()) } pub fn deserialize<'de, D>(deserializer: D) -> Result where D: serde::Deserializer<'de>, { let url_string = String::deserialize(deserializer)?; Url::parse(&url_string).map_err(serde::de::Error::custom) } } pub mod bytes_base64 { use base64::{engine::general_purpose, Engine as _}; use serde::Deserialize; pub fn serialize(my_bytes: &Vec, serializer: S) -> Result where S: serde::Serializer, { let encoded = general_purpose::STANDARD.encode(my_bytes); serializer.serialize_str(&encoded) } pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> where D: serde::Deserializer<'de>, { let encoded = String::deserialize(deserializer)?; let decoded = general_purpose::STANDARD .decode(encoded) .map_err(serde::de::Error::custom)?; Ok(decoded) } } pub mod serde_public_key { use k256::PublicKey; use serde::Deserialize; pub fn serialize(pubkey: &PublicKey, serializer: S) -> Result where S: serde::Serializer, { let encoded = hex::encode(pubkey.to_sec1_bytes()); serializer.serialize_str(&encoded) } pub fn deserialize<'de, D>(deserializer: D) -> Result where D: serde::Deserializer<'de>, { let encoded = String::deserialize(deserializer)?; let decoded = hex::decode(encoded).map_err(serde::de::Error::custom)?; PublicKey::from_sec1_bytes(&decoded).map_err(serde::de::Error::custom) } }