codama_nodes/value_nodes/
injected_value_node.rs1use crate::{CamelCaseString, InjectedValueNode, ValueNode};
2
3impl InjectedValueNode {
4 pub fn new<T>(key: T) -> Self
5 where
6 T: Into<CamelCaseString>,
7 {
8 Self {
9 key: key.into(),
10 fallback: Box::new(None),
11 }
12 }
13
14 pub fn with_fallback<T, U>(key: T, fallback: U) -> Self
15 where
16 T: Into<CamelCaseString>,
17 U: Into<ValueNode>,
18 {
19 Self {
20 key: key.into(),
21 fallback: Box::new(Some(fallback.into())),
22 }
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 use crate::NumberValueNode;
30
31 #[test]
32 fn new() {
33 let node = InjectedValueNode::new("my_key");
34 assert_eq!(node.key, CamelCaseString::new("myKey"));
35 assert_eq!(*node.fallback, None);
36 }
37
38 #[test]
39 fn with_fallback() {
40 let node = InjectedValueNode::with_fallback("my_key", NumberValueNode::new(42));
41 assert_eq!(node.key, CamelCaseString::new("myKey"));
42 assert_eq!(
43 *node.fallback,
44 Some(ValueNode::Number(NumberValueNode::new(42)))
45 );
46 }
47
48 #[test]
49 fn to_json() {
50 let node = InjectedValueNode::new("myKey");
51 let json = serde_json::to_string(&node).unwrap();
52 assert_eq!(json, r#"{"kind":"injectedValueNode","key":"myKey"}"#);
53 }
54
55 #[test]
56 fn from_json() {
57 let json = r#"{"kind":"injectedValueNode","key":"myKey"}"#;
58 let node: InjectedValueNode = serde_json::from_str(json).unwrap();
59 assert_eq!(node, InjectedValueNode::new("myKey"));
60 }
61
62 #[test]
63 fn to_json_with_fallback() {
64 let node = InjectedValueNode::with_fallback("myKey", NumberValueNode::new(42));
65 let json = serde_json::to_string(&node).unwrap();
66 assert_eq!(
67 json,
68 r#"{"kind":"injectedValueNode","key":"myKey","fallback":{"kind":"numberValueNode","number":42}}"#
69 );
70 }
71
72 #[test]
73 fn from_json_with_fallback() {
74 let json = r#"{"kind":"injectedValueNode","key":"myKey","fallback":{"kind":"numberValueNode","number":42}}"#;
75 let node: InjectedValueNode = serde_json::from_str(json).unwrap();
76 assert_eq!(
77 node,
78 InjectedValueNode::with_fallback("myKey", NumberValueNode::new(42u32))
79 );
80 }
81}