codama_nodes/
error_node.rs1use crate::{CamelCaseString, Docs};
2use codama_nodes_derive::node;
3
4#[node]
5pub struct ErrorNode {
6 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}