codama_nodes/value_nodes/
map_entry_value_node.rs1use crate::ValueNode;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct MapEntryValueNode {
6 pub key: ValueNode,
8 pub value: ValueNode,
9}
10
11impl From<MapEntryValueNode> for crate::Node {
12 fn from(val: MapEntryValueNode) -> Self {
13 crate::Node::Value(val.into())
14 }
15}
16
17impl MapEntryValueNode {
18 pub fn new<T, U>(key: T, value: U) -> Self
19 where
20 T: Into<ValueNode>,
21 U: Into<ValueNode>,
22 {
23 Self {
24 key: key.into(),
25 value: value.into(),
26 }
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use crate::{NumberValueNode, StringValueNode};
33
34 use super::*;
35
36 #[test]
37 fn new() {
38 let node = MapEntryValueNode::new(StringValueNode::new("answer"), NumberValueNode::new(42));
39 assert_eq!(node.key, ValueNode::String(StringValueNode::new("answer")));
40 assert_eq!(node.value, ValueNode::Number(NumberValueNode::new(42)));
41 }
42
43 #[test]
44 fn to_json() {
45 let node = MapEntryValueNode::new(StringValueNode::new("answer"), NumberValueNode::new(42));
46 let json = serde_json::to_string(&node).unwrap();
47 assert_eq!(
48 json,
49 r#"{"kind":"mapEntryValueNode","key":{"kind":"stringValueNode","string":"answer"},"value":{"kind":"numberValueNode","number":42}}"#
50 );
51 }
52
53 #[test]
54 fn from_json() {
55 let json = r#"{"kind":"mapEntryValueNode","key":{"kind":"stringValueNode","string":"answer"},"value":{"kind":"numberValueNode","number":42}}"#;
56 let node: MapEntryValueNode = serde_json::from_str(json).unwrap();
57 assert_eq!(
58 node,
59 MapEntryValueNode::new(StringValueNode::new("answer"), NumberValueNode::new(42u32))
60 );
61 }
62}