1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
use super::*; #[derive(Debug, Clone, Eq, PartialEq)] pub struct Decimal { handler: Option<String>, value: BigDecimal, } impl Display for Decimal { fn fmt(&self, f: &mut Formatter) -> fmt::Result { write!(f, "{}", self.value)?; match &self.handler { None => (), Some(s) => write!(f, "{}", s)?, } Ok(()) } } impl Deref for Decimal { type Target = BigDecimal; fn deref(&self) -> &Self::Target { &self.value } } impl From<f32> for Decimal { fn from(v: f32) -> Self { Self { handler: None, value: BigDecimal::try_from(v).unwrap_or_default() } } } impl From<f32> for Value { fn from(v: f32) -> Self { match BigDecimal::try_from(v) { Ok(v) => Value::from(v), Err(_) => Value::Null, } } } impl From<f64> for Decimal { fn from(v: f64) -> Self { Self { handler: None, value: BigDecimal::try_from(v).unwrap_or_default() } } } impl From<f64> for Value { fn from(v: f64) -> Self { match BigDecimal::try_from(v) { Ok(v) => Value::from(v), Err(_) => Value::Null, } } } impl From<BigDecimal> for Decimal { fn from(v: BigDecimal) -> Self { Self { handler: None, value: v } } } impl From<BigDecimal> for Value { fn from(v: BigDecimal) -> Self { Value::Decimal(Box::new(v.into())) } } impl From<Decimal> for Value { fn from(v: Decimal) -> Self { Self::Decimal(Box::new(v)) } } impl Decimal { pub fn set_handler(&mut self, handler: impl Into<String>) { self.handler = Some(handler.into()) } pub fn get_handler(&self) -> Option<String> { self.handler.to_owned() } }