Skip to main content

codama_nodes/
defined_type_node.rs

1use crate::{CamelCaseString, DefinedTypeNode, Docs, TypeNode};
2
3impl DefinedTypeNode {
4    pub fn new<T, U>(name: T, r#type: U) -> Self
5    where
6        T: Into<CamelCaseString>,
7        U: Into<TypeNode>,
8    {
9        Self {
10            name: name.into(),
11            docs: Docs::default(),
12            r#type: Box::new(r#type.into()),
13        }
14    }
15}
16
17#[cfg(test)]
18mod tests {
19    use super::*;
20    use crate::{NumberTypeNode, U8};
21
22    #[test]
23    fn new() {
24        let node = DefinedTypeNode::new("myType", NumberTypeNode::le(U8));
25        assert_eq!(node.name, CamelCaseString::new("myType"));
26        assert_eq!(node.docs, Docs::default());
27        assert_eq!(*node.r#type, TypeNode::Number(NumberTypeNode::le(U8)));
28    }
29
30    #[test]
31    fn direct_instantiation() {
32        let node = DefinedTypeNode {
33            name: "myType".into(),
34            docs: Docs::default(),
35            r#type: Box::new(NumberTypeNode::le(U8).into()),
36        };
37        assert_eq!(node.name, CamelCaseString::new("myType"));
38        assert_eq!(node.docs, Docs::default());
39        assert_eq!(*node.r#type, TypeNode::Number(NumberTypeNode::le(U8)));
40    }
41
42    #[test]
43    fn to_json() {
44        let node = DefinedTypeNode::new("myType", NumberTypeNode::le(U8));
45        let json = serde_json::to_string(&node).unwrap();
46        assert_eq!(
47            json,
48            r#"{"kind":"definedTypeNode","name":"myType","type":{"kind":"numberTypeNode","format":"u8","endian":"le"}}"#
49        );
50    }
51
52    #[test]
53    fn from_json() {
54        let json = r#"{"kind":"definedTypeNode","name":"myType","type":{"kind":"numberTypeNode","format":"u8","endian":"le"}}"#;
55        let node: DefinedTypeNode = serde_json::from_str(json).unwrap();
56        assert_eq!(node, DefinedTypeNode::new("myType", NumberTypeNode::le(U8)));
57    }
58}