codama_nodes/value_nodes/
value_node.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::{
    ArrayValueNode, BooleanValueNode, BytesValueNode, ConstantValueNode, EnumValueNode, HasKind,
    MapEntryValueNode, MapValueNode, NoneValueNode, NumberValueNode, PublicKeyValueNode,
    SetValueNode, SomeValueNode, StringValueNode, StructFieldValueNode, StructValueNode,
    TupleValueNode,
};
use codama_nodes_derive::{node_union, RegisteredNodes};

#[derive(RegisteredNodes)]
#[node_union]
pub enum RegisteredValueNode {
    Array(ArrayValueNode),
    Boolean(BooleanValueNode),
    Bytes(BytesValueNode),
    Constant(ConstantValueNode),
    Enum(EnumValueNode),
    Map(MapValueNode),
    None(NoneValueNode),
    Number(NumberValueNode),
    PublicKey(PublicKeyValueNode),
    Set(SetValueNode),
    Some(SomeValueNode),
    String(StringValueNode),
    Struct(StructValueNode),
    Tuple(TupleValueNode),

    #[registered]
    StructField(StructFieldValueNode),
    #[registered]
    MapEntry(MapEntryValueNode),
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn kind_from_standalone() {
        let node: ValueNode = NoneValueNode::new().into();
        assert_eq!(node.kind(), "noneValueNode");
    }

    #[test]
    fn kind_from_registered() {
        let node: RegisteredValueNode = NoneValueNode::new().into();
        assert_eq!(node.kind(), "noneValueNode");
    }
}