Skip to main content

codama_nodes/
error_node.rs

1use crate::{CamelCaseString, Docs, ErrorNode};
2
3impl ErrorNode {
4    pub fn new<T, U>(name: T, code: u32, message: U) -> Self
5    where
6        T: Into<CamelCaseString>,
7        U: Into<String>,
8    {
9        Self {
10            name: name.into(),
11            code,
12            message: message.into(),
13            docs: Docs::default(),
14        }
15    }
16}
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21
22    #[test]
23    fn new() {
24        let node = ErrorNode::new("myError", 42, "Something went wrong");
25        assert_eq!(node.name, CamelCaseString::new("myError"));
26        assert_eq!(node.code, 42);
27        assert_eq!(node.message, "Something went wrong".to_string());
28        assert_eq!(node.docs, Docs::default());
29    }
30
31    #[test]
32    fn direct_instantiation() {
33        let node = ErrorNode {
34            name: "myError".into(),
35            code: 42,
36            message: "Something went wrong".into(),
37            docs: Docs::default(),
38        };
39        assert_eq!(node.name, CamelCaseString::new("myError"));
40        assert_eq!(node.code, 42);
41        assert_eq!(node.message, "Something went wrong".to_string());
42        assert_eq!(node.docs, Docs::default());
43    }
44
45    #[test]
46    fn to_json() {
47        let node = ErrorNode::new("myError", 42, "Something went wrong");
48        let json = serde_json::to_string(&node).unwrap();
49        assert_eq!(
50            json,
51            r#"{"kind":"errorNode","name":"myError","code":42,"message":"Something went wrong"}"#
52        );
53    }
54
55    #[test]
56    fn from_json() {
57        let json =
58            r#"{"kind":"errorNode","name":"myError","code":42,"message":"Something went wrong"}"#;
59        let node: ErrorNode = serde_json::from_str(json).unwrap();
60        assert_eq!(node, ErrorNode::new("myError", 42, "Something went wrong"));
61    }
62}