serde_ext.rs (783B)
1 #![cfg(feature = "serde")] 2 3 #[cfg(not(feature = "std"))] 4 use alloc::string::{String, ToString}; 5 #[cfg(feature = "std")] 6 use std::string::String; 7 8 use serde::{Deserialize, Deserializer, Serializer, de::Error as DeError}; 9 10 pub mod decimal_str { 11 use super::*; 12 use crate::RadrootsCoreDecimal; 13 use core::str::FromStr; 14 15 pub fn serialize<S: Serializer>( 16 value: &RadrootsCoreDecimal, 17 serializer: S, 18 ) -> Result<S::Ok, S::Error> { 19 serializer.serialize_str(&value.normalize().to_string()) 20 } 21 22 pub fn deserialize<'de, D: Deserializer<'de>>( 23 deserializer: D, 24 ) -> Result<RadrootsCoreDecimal, D::Error> { 25 let s = String::deserialize(deserializer)?; 26 RadrootsCoreDecimal::from_str(&s).map_err(D::Error::custom) 27 } 28 }