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