codama_nodes/discriminator_nodes/
field_discriminator_node.rs1use crate::{CamelCaseString, HasName};
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
29impl HasName for FieldDiscriminatorNode {
30 fn name(&self) -> &CamelCaseString {
31 &self.name
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn new() {
41 let node = FieldDiscriminatorNode::new("my_field", 0);
42 assert_eq!(node.name, CamelCaseString::new("myField"));
43 assert_eq!(node.offset, 0);
44 }
45
46 #[test]
47 fn to_json() {
48 let node = FieldDiscriminatorNode::new("myField", 0);
49 let json = serde_json::to_string(&node).unwrap();
50 assert_eq!(
51 json,
52 r#"{"kind":"fieldDiscriminatorNode","name":"myField","offset":0}"#
53 );
54 }
55
56 #[test]
57 fn from_json() {
58 let json = r#"{"kind":"fieldDiscriminatorNode","name":"myField","offset":0}"#;
59 let node: FieldDiscriminatorNode = serde_json::from_str(json).unwrap();
60 assert_eq!(node, FieldDiscriminatorNode::new("myField", 0));
61 }
62}