use crate::error::WriteResult;
use std::any::Any;
pub trait CustomNode: std::fmt::Debug + Send + Sync {
fn write(&self, writer: &mut dyn CustomNodeWriter) -> WriteResult<()>;
fn clone_box(&self) -> Box<dyn CustomNode>;
fn eq_box(&self, other: &dyn CustomNode) -> bool;
fn is_block(&self) -> bool;
fn as_any(&self) -> &dyn Any;
fn as_any_mut(&mut self) -> &mut dyn Any;
fn type_name(&self) -> &'static str {
std::any::type_name::<Self>()
}
}
pub trait CustomNodeWriter {
fn write_str(&mut self, s: &str) -> std::fmt::Result;
fn write_char(&mut self, c: char) -> std::fmt::Result;
}
impl Clone for Box<dyn CustomNode> {
fn clone(&self) -> Self {
self.clone_box()
}
}
impl PartialEq for Box<dyn CustomNode> {
fn eq(&self, other: &Self) -> bool {
self.eq_box(&**other)
}
}