codama_nodes/
event_node.rs1use crate::{CamelCaseString, Docs, EventNode, TypeNode};
2
3impl EventNode {
4 pub fn new<T, U>(name: T, data: U) -> Self
5 where
6 T: Into<CamelCaseString>,
7 U: Into<TypeNode>,
8 {
9 Self {
10 name: name.into(),
11 docs: Docs::default(),
12 data: Box::new(data.into()),
13 discriminators: vec![],
14 }
15 }
16}
17
18#[cfg(test)]
19mod tests {
20 use super::*;
21 use crate::{NumberTypeNode, StringTypeNode, StructFieldTypeNode, StructTypeNode, U8};
22
23 #[test]
24 fn new() {
25 let node = EventNode::new(
26 "myEvent",
27 StructTypeNode::new(vec![
28 StructFieldTypeNode::new("name", StringTypeNode::utf8()),
29 StructFieldTypeNode::new("age", NumberTypeNode::le(U8)),
30 ]),
31 );
32
33 assert_eq!(node.name, CamelCaseString::new("myEvent"));
34 assert_eq!(node.docs, Docs::default());
35 assert_eq!(
36 *node.data,
37 TypeNode::Struct(StructTypeNode::new(vec![
38 StructFieldTypeNode::new("name", StringTypeNode::utf8()),
39 StructFieldTypeNode::new("age", NumberTypeNode::le(U8)),
40 ]))
41 );
42 assert_eq!(node.discriminators, vec![]);
43 }
44
45 #[test]
46 fn direct_instantiation() {
47 let node = EventNode {
48 name: "myEvent".into(),
49 docs: Docs::default(),
50 data: Box::new(
51 StructTypeNode::new(vec![
52 StructFieldTypeNode::new("name", StringTypeNode::utf8()),
53 StructFieldTypeNode::new("age", NumberTypeNode::le(U8)),
54 ])
55 .into(),
56 ),
57 discriminators: vec![],
58 };
59
60 assert_eq!(node.name, CamelCaseString::new("myEvent"));
61 assert_eq!(node.docs, Docs::default());
62 assert_eq!(
63 *node.data,
64 TypeNode::Struct(StructTypeNode::new(vec![
65 StructFieldTypeNode::new("name", StringTypeNode::utf8()),
66 StructFieldTypeNode::new("age", NumberTypeNode::le(U8)),
67 ]))
68 );
69 assert_eq!(node.discriminators, vec![]);
70 }
71
72 #[test]
73 fn to_json() {
74 let node = EventNode::new(
75 "myEvent",
76 StructTypeNode::new(vec![
77 StructFieldTypeNode::new("name", StringTypeNode::utf8()),
78 StructFieldTypeNode::new("age", NumberTypeNode::le(U8)),
79 ]),
80 );
81
82 let json = serde_json::to_string(&node).unwrap();
83
84 assert_eq!(
85 json,
86 r#"{"kind":"eventNode","name":"myEvent","data":{"kind":"structTypeNode","fields":[{"kind":"structFieldTypeNode","name":"name","type":{"kind":"stringTypeNode","encoding":"utf8"}},{"kind":"structFieldTypeNode","name":"age","type":{"kind":"numberTypeNode","format":"u8","endian":"le"}}]}}"#
87 );
88 }
89
90 #[test]
91 fn from_json() {
92 let json = r#"{"kind":"eventNode","name":"myEvent","data":{"kind":"structTypeNode","fields":[{"kind":"structFieldTypeNode","name":"name","type":{"kind":"stringTypeNode","encoding":"utf8"}},{"kind":"structFieldTypeNode","name":"age","type":{"kind":"numberTypeNode","format":"u8","endian":"le"}}]}}"#;
93
94 let node: EventNode = serde_json::from_str(json).unwrap();
95
96 assert_eq!(
97 node,
98 EventNode::new(
99 "myEvent",
100 StructTypeNode::new(vec![
101 StructFieldTypeNode::new("name", StringTypeNode::utf8()),
102 StructFieldTypeNode::new("age", NumberTypeNode::le(U8)),
103 ]),
104 )
105 );
106 }
107}