tiptap_rusty_parser/
node.rs1use serde::{Deserialize, Serialize};
8use serde_json::{Map, Value};
9
10#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
15pub struct Node {
16 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
18 pub node_type: Option<String>,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub attrs: Option<Map<String, Value>>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub content: Option<Vec<Node>>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub marks: Option<Vec<Mark>>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub text: Option<String>,
35
36 #[serde(flatten)]
38 pub extra: Map<String, Value>,
39}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
43pub struct Mark {
44 #[serde(rename = "type")]
46 pub mark_type: String,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub attrs: Option<Map<String, Value>>,
51
52 #[serde(flatten)]
54 pub extra: Map<String, Value>,
55}
56
57impl Mark {
58 #[inline]
66 pub fn new(mark_type: impl Into<String>) -> Self {
67 Mark {
68 mark_type: mark_type.into(),
69 attrs: None,
70 extra: Map::new(),
71 }
72 }
73
74 #[inline]
76 pub fn attr(mut self, key: impl Into<String>, value: impl Into<Value>) -> Self {
77 self.attrs
78 .get_or_insert_with(Map::new)
79 .insert(key.into(), value.into());
80 self
81 }
82}