Skip to main content

codama_nodes/display_nodes/
amount_number_display_node.rs

1use crate::{AmountNumberDisplayNode, InjectableNumberValueNode, InjectableStringValueNode};
2
3impl AmountNumberDisplayNode {
4    pub fn new<T, U>(decimals: T, unit: U) -> Self
5    where
6        T: Into<InjectableNumberValueNode>,
7        U: Into<InjectableStringValueNode>,
8    {
9        Self {
10            decimals: Box::new(Some(decimals.into())),
11            unit: Box::new(Some(unit.into())),
12        }
13    }
14}
15
16#[cfg(test)]
17mod tests {
18    use super::*;
19    use crate::{NumberValueNode, StringValueNode};
20
21    #[test]
22    fn new() {
23        let node =
24            AmountNumberDisplayNode::new(NumberValueNode::new(6), StringValueNode::new("USDC"));
25        assert_eq!(
26            *node.decimals,
27            Some(InjectableNumberValueNode::Number(NumberValueNode::new(6)))
28        );
29        assert_eq!(
30            *node.unit,
31            Some(InjectableStringValueNode::String(StringValueNode::new(
32                "USDC"
33            )))
34        );
35    }
36
37    #[test]
38    fn default() {
39        let node = AmountNumberDisplayNode::default();
40        assert_eq!(*node.decimals, None);
41        assert_eq!(*node.unit, None);
42    }
43
44    #[test]
45    fn to_json() {
46        let node =
47            AmountNumberDisplayNode::new(NumberValueNode::new(6), StringValueNode::new("USDC"));
48        let json = serde_json::to_string(&node).unwrap();
49        assert_eq!(
50            json,
51            r#"{"kind":"amountNumberDisplayNode","decimals":{"kind":"numberValueNode","number":6},"unit":{"kind":"stringValueNode","string":"USDC"}}"#
52        );
53    }
54
55    #[test]
56    fn from_json() {
57        let json = r#"{"kind":"amountNumberDisplayNode","decimals":{"kind":"numberValueNode","number":6},"unit":{"kind":"stringValueNode","string":"USDC"}}"#;
58        let node: AmountNumberDisplayNode = serde_json::from_str(json).unwrap();
59        assert_eq!(
60            node,
61            AmountNumberDisplayNode::new(NumberValueNode::new(6u32), StringValueNode::new("USDC"))
62        );
63    }
64}