telegraph_api_rs/types/
node.rs1use serde::{Deserialize, Serialize};
2
3use super::{NodeElement, TelegraphType};
4
5
6#[allow(missing_docs)]
7#[derive(Deserialize, Serialize, Debug)]
10#[serde(untagged)]
11pub enum Node {
12 String(String),
13 NodeElement(NodeElement)
14}
15
16
17impl TelegraphType for Node {}
18
19
20#[cfg(test)]
21mod tests {
22 use serde_json;
23
24 use crate::types::{NodeElement, NodeTag};
25
26 use super::Node;
27
28 #[test]
29 fn node_text_deserialize() {
30 let json = "[\"It's text node\"]";
31 let nodes: Vec<Node> = serde_json::from_str(json).unwrap_or_default();
32 let el = if let Some(Node::String(el)) = nodes.into_iter().nth(0) {
33 el
34 } else {
35 String::new()
36 };
37 assert_eq!(el, "It's text node")
38 }
39
40 #[test]
41 fn node_element_deserialize() {
42 let json = r#"
43 {
44 "tag": "p"
45 }"#;
46 let node: Node = serde_json::from_str(json).unwrap();
47 let el = if let Node::NodeElement(el) = node {
48 el
49 } else {
50 NodeElement::default()
51 };
52 assert_eq!(el.tag.map( |node_tag|
53 match node_tag {
54 NodeTag::P => "p".to_string(),
55 _ => "".to_string()
56 }
57 ).unwrap(), "p");
58 }
59}