deser_core/ext/bridges/
rust_decimal.rs1use crate::error::Error;
2use crate::ext::Decimal;
3use crate::ext::known::{Bridge, impl_bridge, invalid};
4use alloc::format;
5use alloc::string::ToString;
6
7impl Bridge for ::rust_decimal::Decimal {
8 type Known = Decimal;
9
10 fn to_known(&self) -> Result<Decimal, Error> {
11 Decimal::new(self.to_string())
12 }
13
14 fn from_known(value: Decimal) -> Result<::rust_decimal::Decimal, Error> {
16 let s = value.as_str();
17 let rv = if s.contains(['e', 'E']) {
18 ::rust_decimal::Decimal::from_scientific(s)
19 } else {
20 ::rust_decimal::Decimal::from_str_exact(s)
21 };
22 rv.map_err(|err| invalid(format!("cannot represent decimal: {}", err)))
23 }
24}
25
26impl_bridge!(::rust_decimal::Decimal);