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