Skip to main content

codama_nodes/count_nodes/
prefixed_count_node.rs

1use crate::{NestedTypeNode, NumberTypeNode, PrefixedCountNode};
2
3impl PrefixedCountNode {
4    pub fn new<T>(prefix: T) -> Self
5    where
6        T: Into<NestedTypeNode<NumberTypeNode>>,
7    {
8        Self {
9            prefix: prefix.into(),
10        }
11    }
12}
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17    use crate::{Endianness, NestedTypeNodeTrait, PreOffsetTypeNode, U32};
18
19    #[test]
20    fn new() {
21        let node = PrefixedCountNode::new(NumberTypeNode::le(U32));
22        assert_eq!(
23            node.prefix,
24            NestedTypeNode::Value(NumberTypeNode::new(U32, Endianness::Le))
25        );
26        assert_eq!(
27            node.prefix.get_nested_type_node(),
28            &NumberTypeNode::new(U32, Endianness::Le)
29        );
30    }
31
32    #[test]
33    fn new_with_nested_prefix() {
34        let node = PrefixedCountNode::new(PreOffsetTypeNode::absolute(NumberTypeNode::le(U32), 0));
35        assert_eq!(
36            node.prefix,
37            NestedTypeNode::PreOffset(PreOffsetTypeNode::absolute(
38                NestedTypeNode::Value(NumberTypeNode::new(U32, Endianness::Le)),
39                0
40            ))
41        );
42        assert_eq!(
43            node.prefix.get_nested_type_node(),
44            &NumberTypeNode::new(U32, Endianness::Le)
45        );
46    }
47
48    #[test]
49    fn to_json() {
50        let node = PrefixedCountNode::new(NumberTypeNode::le(U32));
51        let json = serde_json::to_string(&node).unwrap();
52        assert_eq!(
53            json,
54            r#"{"kind":"prefixedCountNode","prefix":{"kind":"numberTypeNode","format":"u32","endian":"le"}}"#
55        );
56    }
57
58    #[test]
59    fn from_json() {
60        let json = r#"{"kind":"prefixedCountNode","prefix":{"kind":"numberTypeNode","format":"u32","endian":"le"}}"#;
61        let node: PrefixedCountNode = serde_json::from_str(json).unwrap();
62        assert_eq!(node, PrefixedCountNode::new(NumberTypeNode::le(U32)));
63    }
64}