codama_nodes/display_nodes/
amount_number_display_node.rs1use 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}