cmark_writer/writer/html/
error.rs1use crate::error::WriteError;
2use std::fmt::{self, Display};
3use std::io;
4
5#[derive(Debug)]
7pub enum HtmlWriteError {
8 Io(io::Error),
10 UnsupportedNodeType(String),
12 InvalidStructure(String),
14 InvalidHtmlTag(String),
16 InvalidHtmlAttribute(String),
18 CustomNodeError(String),
20 }
22
23impl Display for HtmlWriteError {
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25 match self {
26 HtmlWriteError::Io(err) => write!(f, "HTML I/O error: {err}"),
27 HtmlWriteError::UnsupportedNodeType(node_type) => {
28 write!(
29 f,
30 "HTML conversion not supported for node type: {node_type}"
31 )
32 }
33 HtmlWriteError::InvalidStructure(msg) => {
34 write!(f, "Invalid structure for HTML conversion: {msg}")
35 }
36 HtmlWriteError::InvalidHtmlTag(tag_name) => {
37 write!(f, "Invalid HTML tag name: {tag_name}")
38 }
39 HtmlWriteError::InvalidHtmlAttribute(attr_name) => {
40 write!(f, "Invalid HTML attribute name: {attr_name}")
41 }
42 HtmlWriteError::CustomNodeError(msg) => {
43 write!(f, "Error writing custom node: {msg}")
44 }
45 }
46 }
47}
48
49impl std::error::Error for HtmlWriteError {
50 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
51 match self {
52 HtmlWriteError::Io(err) => Some(err),
53 _ => None,
54 }
55 }
56}
57
58impl HtmlWriteError {
59 pub fn into_write_error(self) -> WriteError {
61 match self {
62 HtmlWriteError::Io(err) => WriteError::IoError(err),
63 HtmlWriteError::UnsupportedNodeType(msg) => WriteError::Custom {
64 message: format!("HTML writer error: {msg}").into(),
65 code: None,
66 },
67 HtmlWriteError::InvalidStructure(msg) => WriteError::InvalidStructure(msg.into()),
68 HtmlWriteError::InvalidHtmlTag(tag) => WriteError::InvalidHtmlTag(tag.into()),
69 HtmlWriteError::InvalidHtmlAttribute(attr) => {
70 WriteError::InvalidHtmlAttribute(attr.into())
71 }
72 HtmlWriteError::CustomNodeError(msg) => WriteError::Custom {
73 message: format!("Custom node error: {msg}").into(),
74 code: None,
75 },
76 }
77 }
78}
79
80impl From<io::Error> for HtmlWriteError {
82 fn from(err: io::Error) -> Self {
83 HtmlWriteError::Io(err)
84 }
85}
86
87pub type HtmlWriteResult<T> = Result<T, HtmlWriteError>;