Skip to main content

rusty_xml_parser/
error.rs

1//! `xmlParserErrors` discriminants kept identical to libxml2 `xmlerror.h`.
2
3use std::fmt;
4
5pub const XML_ERR_OK: i32 = 0;
6pub const XML_ERR_INTERNAL_ERROR: i32 = 1;
7pub const XML_ERR_NO_MEMORY: i32 = 2;
8pub const XML_ERR_DOCUMENT_START: i32 = 3;
9pub const XML_ERR_DOCUMENT_EMPTY: i32 = 4;
10pub const XML_ERR_DOCUMENT_END: i32 = 5;
11pub const XML_ERR_INVALID_HEX_CHARREF: i32 = 6;
12pub const XML_ERR_INVALID_DEC_CHARREF: i32 = 7;
13pub const XML_ERR_INVALID_CHARREF: i32 = 8;
14pub const XML_ERR_INVALID_CHAR: i32 = 9;
15pub const XML_ERR_ENTITYREF_NO_NAME: i32 = 22;
16pub const XML_ERR_ENTITYREF_SEMICOL_MISSING: i32 = 23;
17pub const XML_ERR_UNDECLARED_ENTITY: i32 = 26;
18pub const XML_ERR_UNSUPPORTED_ENCODING: i32 = 32;
19pub const XML_ERR_LT_IN_ATTRIBUTE: i32 = 38;
20pub const XML_ERR_ATTRIBUTE_NOT_STARTED: i32 = 39;
21pub const XML_ERR_ATTRIBUTE_WITHOUT_VALUE: i32 = 41;
22pub const XML_ERR_ATTRIBUTE_REDEFINED: i32 = 42;
23pub const XML_ERR_LITERAL_NOT_FINISHED: i32 = 44;
24pub const XML_ERR_COMMENT_NOT_FINISHED: i32 = 45;
25pub const XML_ERR_PI_NOT_FINISHED: i32 = 47;
26pub const XML_ERR_XMLDECL_NOT_FINISHED: i32 = 57;
27pub const XML_ERR_MISPLACED_CDATA_END: i32 = 62;
28pub const XML_ERR_CDATA_NOT_FINISHED: i32 = 63;
29pub const XML_ERR_RESERVED_XML_NAME: i32 = 64;
30pub const XML_ERR_SPACE_REQUIRED: i32 = 65;
31pub const XML_ERR_NAME_REQUIRED: i32 = 68;
32pub const XML_ERR_GT_REQUIRED: i32 = 73;
33pub const XML_ERR_LT_REQUIRED: i32 = 72;
34pub const XML_ERR_EQUAL_REQUIRED: i32 = 75;
35pub const XML_ERR_TAG_NAME_MISMATCH: i32 = 76;
36pub const XML_ERR_TAG_NOT_FINISHED: i32 = 77;
37pub const XML_ERR_ENCODING_NAME: i32 = 79;
38pub const XML_ERR_HYPHEN_IN_COMMENT: i32 = 80;
39pub const XML_ERR_EXTRA_CONTENT: i32 = 86;
40pub const XML_WAR_NS_URI_RELATIVE: i32 = 100;
41pub const XML_NS_ERR_XML_NAMESPACE: i32 = 200;
42pub const XML_NS_ERR_UNDEFINED_NAMESPACE: i32 = 201;
43pub const XML_NS_ERR_QNAME: i32 = 202;
44pub const XML_NS_ERR_ATTRIBUTE_REDEFINED: i32 = 203;
45
46/// Parser / tree error with C discriminant.
47#[derive(Clone, Debug, PartialEq, Eq)]
48pub struct XmlError {
49    pub code: i32,
50    pub message: String,
51    pub line: u32,
52    pub col: u32,
53}
54
55impl fmt::Display for XmlError {
56    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
57        write!(
58            f,
59            "{}:{}: error code {}: {}",
60            self.line, self.col, self.code, self.message
61        )
62    }
63}
64
65impl std::error::Error for XmlError {}
66
67impl XmlError {
68    pub fn new(code: i32, message: impl Into<String>, line: u32, col: u32) -> Self {
69        Self {
70            code,
71            message: message.into(),
72            line,
73            col,
74        }
75    }
76}