1use anyxml_uri::ParseRIError;
2
3use crate::encoding::{DecodeError, EncodeError};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6pub enum XMLErrorLevel {
7 FatalError,
8 Error,
9 Warning,
10}
11
12impl std::fmt::Display for XMLErrorLevel {
13 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14 match *self {
15 Self::FatalError => write!(f, "fatal error"),
16 Self::Error => write!(f, "error"),
17 Self::Warning => write!(f, "warning"),
18 }
19 }
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
23pub enum XMLErrorDomain {
24 Parser,
25 Namespace,
26 DTDValid,
27}
28
29impl std::fmt::Display for XMLErrorDomain {
30 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
31 match *self {
32 Self::Parser => write!(f, "parser"),
33 Self::Namespace => write!(f, "namespace"),
34 Self::DTDValid => write!(f, "dtd-valid"),
35 }
36 }
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
40pub enum XMLError {
41 InternalError,
43 ParserUnknownError,
45 ParserUnsupportedEncoding,
46 ParserUnsupportedXMLVersion,
47 ParserTooLongXMLVersionNumber,
48 PraserTooLongEncodingName,
49 ParserEmptyNmtoken,
50 ParserEmptyName,
51 ParserEmptyNCName,
52 ParserEmptyQName,
53 ParserEmptyQNamePrefix,
54 ParserEmptyQNameLocalPart,
55 ParserEmptyNmtokens,
56 ParserEmptyNames,
57 ParserInvalidNameStartChar,
58 ParserInvalidNameChar,
59 ParserInvalidNCNameStartChar,
60 ParserInvalidNCNameChar,
61 ParserInvalidQNameSeparator,
62 ParserIncorrectLiteralQuotation,
63 ParserInvalidSystemLiteral,
64 ParserSystemLiteralWithFragment,
65 ParserInvalidPubidLiteral,
66 ParserInvalidAttValue,
67 ParserInvalidExternalID,
68 ParserInvalidCharacter,
69 ParserInvalidXMLDecl,
70 ParserInvalidTextDecl,
71 ParserInvalidXMLVersion,
72 ParserInvalidEncodingDecl,
73 ParserInvalidEncodingName,
74 ParserInvalidSDDecl,
75 ParserInvalidComment,
76 ParserInvalidCDSect,
77 ParserInvalidStandaloneDocument,
78 ParserInvalidProcessingInstruction,
79 ParserUnacceptablePITarget,
80 ParserUnacceptablePatternInCharData,
81 ParserInvalidDoctypeDecl,
82 ParserInvalidElementDecl,
83 ParserDuplicateElementDecl,
84 ParserAmbiguousElementContentModel,
85 ParserDuplicateMixedContent,
86 ParserInvalidAttlistDecl,
87 ParserDuplicateAttlistDecl,
88 ParserDuplicateTokensInAttlistDecl,
89 ParserMultipleIDAttributePerElement,
90 ParserInvalidIDAttributeValue,
91 ParserInvalidIDREFAttributeValue,
92 ParserNotationAttlistDeclOnEmptyElement,
93 ParserSyntaxticallyIncorrectAttributeDefault,
94 ParserInvalidEntityDecl,
95 ParserDuplicateEntityDecl,
96 ParserInvalidNotationDecl,
97 ParserDuplicateNotationDecl,
98 ParserUndeclaredNotation,
99 ParserInvalidConditionalSect,
100 ParserInvalidStartOrEmptyTag,
101 ParserInvalidEndTag,
102 ParserUnclosedStartTag,
103 ParserMismatchElementType,
104 ParserMismatchElementContentModel,
105 ParserUndeclaredElement,
106 ParserInvalidAttribute,
107 ParserUndeclaredAttribute,
108 ParserDuplicateAttributes,
109 ParserDuplicateIDAttribute,
110 ParserUnresolvableIDReference,
111 ParserMultipleNotationAttributePerElement,
112 ParserUnacceptableNotationAttribute,
113 ParserUnacceptableEnumerationAttribute,
114 ParserMismatchFixedDefaultAttributeValue,
115 ParserRequiredAttributeNotFound,
116 ParserUnacceptableXMLSpaceAttribute,
117 ParserInvalidCharacterReference,
118 ParserInvalidEntityReference,
119 ParserEntityNotFound,
120 ParserEntityRecursion,
121 ParserEntityIncorrectNesting,
122 ParserUndeclaredEntityReference,
123 ParserNamespaceNameNotURI,
124 ParserNamespaceNameNotAbsoluteURI,
125 ParserUnacceptableNamespaceName,
126 ParserUndefinedNamespace,
127 ParserUnexpectedDocumentContent,
128 ParserUnexpectedEOF,
129 IOUnknownError,
131 IONotFound,
132 IOPermissionDenied,
133 IOConnectionRefused,
134 IOConnectionReset,
135 IOHostUnreachable,
136 IONetworkUnreachable,
137 IOConnectionAborted,
138 IONotConnected,
139 IOAddrInUse,
140 IOAddrNotAvailable,
141 IONetworkDown,
142 IOBrokenPipe,
143 IOAlreadyExists,
144 IOWouldBlock,
145 IONotADirectory,
146 IOIsADirectory,
147 IODirectoryNotEmpty,
148 IOReadOnlyFilesystem,
149 IOFilesystemLoop,
150 IOStaleNetworkFileHandle,
151 IOInvalidInput,
152 IOInvalidData,
153 IOTimedOut,
154 IOWriteZero,
155 IOStorageFull,
156 IONotSeekable,
157 IOQuotaExceeded,
158 IOFileTooLarge,
159 IOResourceBusy,
160 IOExecutableFileBusy,
161 IODeadlock,
162 IOCrossesDevices,
163 IOTooManyLinks,
164 IOInvalidFilename,
165 IOArgumentListTooLong,
166 IOInterrupted,
167 IOUnsupported,
168 IOUnexpectedEof,
169 IOOutOfMemory,
170 IOInProgress,
171 EncoderInputIsEmpty,
173 EncoderOutputTooShort,
174 EncoderUnmappable {
175 read: usize,
176 write: usize,
177 c: char,
178 },
179 EncoderUnknownError,
180 DecoderInputIsEmpty,
181 DecoderOutputTooShort,
182 DecoderMalformed {
183 read: usize,
184 write: usize,
185 length: usize,
186 offset: usize,
187 },
188 DecoderUnknownError,
189 URIParseFailure,
191 URIBaseURINotAbsolute,
192 URIBaseURINotFound,
193}
194
195impl std::fmt::Display for XMLError {
196 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
197 write!(f, "{self:?}")
198 }
199}
200
201impl std::error::Error for XMLError {}
202
203impl From<std::io::Error> for XMLError {
204 fn from(value: std::io::Error) -> Self {
205 use std::io::ErrorKind::*;
206 match value.kind() {
207 NotFound => XMLError::IONotFound,
208 PermissionDenied => XMLError::IOPermissionDenied,
209 ConnectionRefused => XMLError::IOConnectionRefused,
210 ConnectionReset => XMLError::IOConnectionReset,
211 HostUnreachable => XMLError::IOHostUnreachable,
212 NetworkUnreachable => XMLError::IONetworkUnreachable,
213 ConnectionAborted => XMLError::IOConnectionAborted,
214 NotConnected => XMLError::IONotConnected,
215 AddrInUse => XMLError::IOAddrInUse,
216 AddrNotAvailable => XMLError::IOAddrNotAvailable,
217 NetworkDown => XMLError::IONetworkDown,
218 BrokenPipe => XMLError::IOBrokenPipe,
219 AlreadyExists => XMLError::IOAlreadyExists,
220 WouldBlock => XMLError::IOWouldBlock,
221 NotADirectory => XMLError::IONotADirectory,
222 IsADirectory => XMLError::IOIsADirectory,
223 DirectoryNotEmpty => XMLError::IODirectoryNotEmpty,
224 ReadOnlyFilesystem => XMLError::IOReadOnlyFilesystem,
225 StaleNetworkFileHandle => XMLError::IOStaleNetworkFileHandle,
226 InvalidInput => XMLError::IOInvalidInput,
227 InvalidData => XMLError::IOInvalidData,
228 TimedOut => XMLError::IOTimedOut,
229 WriteZero => XMLError::IOWriteZero,
230 StorageFull => XMLError::IOStorageFull,
231 NotSeekable => XMLError::IONotSeekable,
232 QuotaExceeded => XMLError::IOQuotaExceeded,
233 FileTooLarge => XMLError::IOFileTooLarge,
234 ResourceBusy => XMLError::IOResourceBusy,
235 ExecutableFileBusy => XMLError::IOExecutableFileBusy,
236 Deadlock => XMLError::IODeadlock,
237 CrossesDevices => XMLError::IOCrossesDevices,
238 TooManyLinks => XMLError::IOTooManyLinks,
239 InvalidFilename => XMLError::IOInvalidFilename,
240 ArgumentListTooLong => XMLError::IOArgumentListTooLong,
241 Interrupted => XMLError::IOInterrupted,
242 Unsupported => XMLError::IOUnsupported,
243 UnexpectedEof => XMLError::IOUnexpectedEof,
244 OutOfMemory => XMLError::IOOutOfMemory,
245 Other => XMLError::IOUnknownError,
246 _ => unimplemented!(),
247 }
248 }
249}
250
251impl From<EncodeError> for XMLError {
252 fn from(value: EncodeError) -> Self {
253 use EncodeError::*;
254 match value {
255 InputIsEmpty => XMLError::EncoderInputIsEmpty,
256 OutputTooShort => XMLError::EncoderOutputTooShort,
257 Unmappable { read, write, c } => XMLError::EncoderUnmappable { read, write, c },
258 Other { msg: _ } => XMLError::EncoderUnknownError,
259 }
260 }
261}
262
263impl From<DecodeError> for XMLError {
264 fn from(value: DecodeError) -> Self {
265 use DecodeError::*;
266 match value {
267 InputIsEmpty => XMLError::DecoderInputIsEmpty,
268 OutputTooShort => XMLError::DecoderOutputTooShort,
269 Malformed {
270 read,
271 write,
272 length,
273 offset,
274 } => XMLError::DecoderMalformed {
275 read,
276 write,
277 length,
278 offset,
279 },
280 Other { msg: _ } => XMLError::DecoderUnknownError,
281 }
282 }
283}
284
285impl From<ParseRIError> for XMLError {
286 fn from(_: ParseRIError) -> Self {
287 Self::URIParseFailure
288 }
289}