From 10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:41:41 +0200 Subject: Merging upstream version 1.70.0+dfsg2. Signed-off-by: Daniel Baumann --- vendor/pasetors/src/serde.rs | 133 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 vendor/pasetors/src/serde.rs (limited to 'vendor/pasetors/src/serde.rs') diff --git a/vendor/pasetors/src/serde.rs b/vendor/pasetors/src/serde.rs new file mode 100644 index 000000000..92eb5fe89 --- /dev/null +++ b/vendor/pasetors/src/serde.rs @@ -0,0 +1,133 @@ +use crate::keys::{AsymmetricPublicKey, AsymmetricSecretKey, SymmetricKey}; +#[cfg(feature = "paserk")] +use crate::paserk::{FormatAsPaserk, Id}; +use alloc::string::String; +use core::convert::TryFrom; + +#[cfg(all(feature = "paserk", feature = "serde"))] +#[cfg_attr(docsrs, doc(cfg(all(feature = "paserk", feature = "serde"))))] +impl serde::Serialize for AsymmetricPublicKey +where + AsymmetricPublicKey: FormatAsPaserk, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + use serde::ser::Error; + let mut paserk_string = String::new(); + self.fmt(&mut paserk_string).map_err(S::Error::custom)?; + serializer.serialize_str(&paserk_string) + } +} + +#[cfg(all(feature = "serde", feature = "std"))] +#[cfg_attr(docsrs, doc(cfg(all(feature = "serde", feature = "std"))))] +impl<'de, V> serde::Deserialize<'de> for AsymmetricPublicKey +where + AsymmetricPublicKey: TryFrom<&'de str>, + as TryFrom<&'de str>>::Error: std::fmt::Display, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let paserk_string = <&str>::deserialize(deserializer)?; + TryFrom::try_from(paserk_string).map_err(serde::de::Error::custom) + } +} + +#[cfg(all(feature = "paserk", feature = "serde"))] +#[cfg_attr(docsrs, doc(cfg(all(feature = "paserk", feature = "serde"))))] +impl serde::Serialize for AsymmetricSecretKey +where + AsymmetricSecretKey: FormatAsPaserk, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + use serde::ser::Error; + let mut paserk_string = String::new(); + self.fmt(&mut paserk_string).map_err(S::Error::custom)?; + serializer.serialize_str(&paserk_string) + } +} + +#[cfg(all(feature = "serde", feature = "std"))] +#[cfg_attr(docsrs, doc(cfg(all(feature = "serde", feature = "std"))))] +impl<'de, V> serde::Deserialize<'de> for AsymmetricSecretKey +where + AsymmetricSecretKey: TryFrom<&'de str>, + as TryFrom<&'de str>>::Error: std::fmt::Display, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let paserk_string = <&str>::deserialize(deserializer)?; + TryFrom::try_from(paserk_string).map_err(serde::de::Error::custom) + } +} + +#[cfg(all(feature = "paserk", feature = "serde"))] +#[cfg_attr(docsrs, doc(cfg(all(feature = "paserk", feature = "serde"))))] +impl serde::Serialize for SymmetricKey +where + SymmetricKey: FormatAsPaserk, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + use serde::ser::Error; + let mut paserk_string = String::new(); + self.fmt(&mut paserk_string).map_err(S::Error::custom)?; + serializer.serialize_str(&paserk_string) + } +} + +#[cfg(all(feature = "serde", feature = "std"))] +#[cfg_attr(docsrs, doc(cfg(all(feature = "serde", feature = "std"))))] +impl<'de, V> serde::Deserialize<'de> for SymmetricKey +where + SymmetricKey: TryFrom<&'de str>, + as TryFrom<&'de str>>::Error: std::fmt::Display, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let paserk_string = <&str>::deserialize(deserializer)?; + TryFrom::try_from(paserk_string).map_err(serde::de::Error::custom) + } +} + +#[cfg(all(feature = "paserk", feature = "serde"))] +#[cfg_attr(docsrs, doc(cfg(all(feature = "paserk", feature = "serde"))))] +impl serde::Serialize for Id { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + use serde::ser::Error; + let mut paserk_id = String::new(); + self.fmt(&mut paserk_id).map_err(S::Error::custom)?; + serializer.serialize_str(&paserk_id) + } +} + +#[cfg(all(feature = "paserk", feature = "serde", feature = "std"))] +#[cfg_attr( + docsrs, + doc(cfg(all(feature = "paserk", feature = "serde", feature = "std"))) +)] +impl<'de> serde::Deserialize<'de> for Id { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let paserk_id = <&str>::deserialize(deserializer)?; + TryFrom::try_from(paserk_id).map_err(serde::de::Error::custom) + } +} -- cgit v1.2.3