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: {}",
31 node_type
32 )
33 }
34 HtmlWriteError::InvalidStructure(msg) => {
35 write!(f, "Invalid structure for HTML conversion: {}", msg)
36 }
37 HtmlWriteError::InvalidHtmlTag(tag_name) => {
38 write!(f, "Invalid HTML tag name: {}", tag_name)
39 }
40 HtmlWriteError::InvalidHtmlAttribute(attr_name) => {
41 write!(f, "Invalid HTML attribute name: {}", attr_name)
42 }
43 HtmlWriteError::CustomNodeError(msg) => {
44 write!(f, "Error writing custom node: {}", msg)
45 }
46 }
47 }
48}
49
50impl std::error::Error for HtmlWriteError {
51 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
52 match self {
53 HtmlWriteError::Io(err) => Some(err),
54 _ => None,
55 }
56 }
57}
58
59impl HtmlWriteError {
60 pub fn into_write_error(self) -> WriteError {
62 match self {
63 HtmlWriteError::Io(err) => WriteError::IoError(err),
64 HtmlWriteError::UnsupportedNodeType(msg) => WriteError::Custom {
65 message: format!("HTML writer error: {}", msg).into(),
66 code: None,
67 },
68 HtmlWriteError::InvalidStructure(msg) => WriteError::InvalidStructure(msg.into()),
69 HtmlWriteError::InvalidHtmlTag(tag) => WriteError::InvalidHtmlTag(tag.into()),
70 HtmlWriteError::InvalidHtmlAttribute(attr) => {
71 WriteError::InvalidHtmlAttribute(attr.into())
72 }
73 HtmlWriteError::CustomNodeError(msg) => WriteError::Custom {
74 message: format!("Custom node error: {}", msg).into(),
75 code: None,
76 },
77 }
78 }
79}
80
81impl From<io::Error> for HtmlWriteError {
83 fn from(err: io::Error) -> Self {
84 HtmlWriteError::Io(err)
85 }
86}
87
88pub type HtmlWriteResult<T> = Result<T, HtmlWriteError>;