codama_nodes/
error_node.rs

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