codama_nodes/discriminator_nodes/
field_discriminator_node.rs1use crate::CamelCaseString;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct FieldDiscriminatorNode {
6 pub name: CamelCaseString,
8 pub offset: usize,
9}
10
11impl From<FieldDiscriminatorNode> for crate::Node {
12 fn from(val: FieldDiscriminatorNode) -> Self {
13 crate::Node::Discriminator(val.into())
14 }
15}
16
17impl FieldDiscriminatorNode {
18 pub fn new<T>(name: T, offset: usize) -> Self
19 where
20 T: Into<CamelCaseString>,
21 {
22 Self {
23 name: name.into(),
24 offset,
25 }
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn new() {
35 let node = FieldDiscriminatorNode::new("my_field", 0);
36 assert_eq!(node.name, CamelCaseString::new("myField"));
37 assert_eq!(node.offset, 0);
38 }
39
40 #[test]
41 fn to_json() {
42 let node = FieldDiscriminatorNode::new("myField", 0);
43 let json = serde_json::to_string(&node).unwrap();
44 assert_eq!(
45 json,
46 r#"{"kind":"fieldDiscriminatorNode","name":"myField","offset":0}"#
47 );
48 }
49
50 #[test]
51 fn from_json() {
52 let json = r#"{"kind":"fieldDiscriminatorNode","name":"myField","offset":0}"#;
53 let node: FieldDiscriminatorNode = serde_json::from_str(json).unwrap();
54 assert_eq!(node, FieldDiscriminatorNode::new("myField", 0));
55 }
56}