codama_nodes/count_nodes/
prefixed_count_node.rs1use 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}