cmark_writer/ast/
custom.rs1use crate::error::WriteResult;
4use std::any::Any;
5
6pub trait CustomNode: std::fmt::Debug + Send + Sync {
8 fn write(&self, writer: &mut dyn CustomNodeWriter) -> WriteResult<()>;
10
11 fn clone_box(&self) -> Box<dyn CustomNode>;
13
14 fn eq_box(&self, other: &dyn CustomNode) -> bool;
16
17 fn is_block(&self) -> bool;
19
20 fn as_any(&self) -> &dyn Any;
22
23 fn as_any_mut(&mut self) -> &mut dyn Any;
25
26 fn type_name(&self) -> &'static str {
28 std::any::type_name::<Self>()
29 }
30}
31
32pub trait CustomNodeWriter {
34 fn write_str(&mut self, s: &str) -> std::fmt::Result;
36
37 fn write_char(&mut self, c: char) -> std::fmt::Result;
39}
40
41impl Clone for Box<dyn CustomNode> {
43 fn clone(&self) -> Self {
44 self.clone_box()
45 }
46}
47
48impl PartialEq for Box<dyn CustomNode> {
50 fn eq(&self, other: &Self) -> bool {
51 self.eq_box(&**other)
52 }
53}