@@ -1,6 +1,6 @@
[package]
name = "minidom"
-version = "0.3.3"
+version = "0.4.0"
authors = ["lumi <lumi@pew.im>", "Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>", "Bastien Orivel <eijebong+minidom@bananium.fr>"]
description = "A small, simple DOM implementation on top of xml-rs."
homepage = "https://gitlab.com/lumi/minidom-rs"
@@ -15,3 +15,4 @@ gitlab = { repository = "lumi/minidom-rs" }
[dependencies]
xml-rs = "0.4.1"
+error-chain = "0.10.0"
@@ -7,7 +7,7 @@ use std::collections::btree_map;
use std::fmt;
-use error::Error;
+use error::{Error, ErrorKind, Result};
use xml::reader::{XmlEvent as ReaderEvent, EventReader};
use xml::writer::{XmlEvent as WriterEvent, EventWriter, EmitterConfig};
@@ -100,7 +100,7 @@ impl fmt::Debug for Element {
impl FromStr for Element {
type Err = Error;
- fn from_str(s: &str) -> Result<Element, Error> {
+ fn from_str(s: &str) -> Result<Element> {
let mut reader = EventReader::new(Cursor::new(s));
Element::from_reader(&mut reader)
}
@@ -246,7 +246,7 @@ impl Element {
}
/// Parse a document from an `EventReader`.
- pub fn from_reader<R: Read>(reader: &mut EventReader<R>) -> Result<Element, Error> {
+ pub fn from_reader<R: Read>(reader: &mut EventReader<R>) -> Result<Element> {
loop {
let e = reader.next()?;
match e {
@@ -272,7 +272,7 @@ impl Element {
return Ok(root);
},
ReaderEvent::EndDocument => {
- return Err(Error::EndOfDocument);
+ bail!(ErrorKind::EndOfDocument);
},
_ => () // TODO: may need more errors
}
@@ -280,7 +280,7 @@ impl Element {
}
#[cfg_attr(feature = "cargo-clippy", allow(wrong_self_convention))]
- fn from_reader_inner<R: Read>(&mut self, reader: &mut EventReader<R>) -> Result<(), Error> {
+ fn from_reader_inner<R: Read>(&mut self, reader: &mut EventReader<R>) -> Result<()> {
loop {
let e = reader.next()?;
match e {
@@ -312,7 +312,7 @@ impl Element {
self.append_text_node(s);
},
ReaderEvent::EndDocument => {
- return Err(Error::EndOfDocument);
+ bail!(ErrorKind::EndOfDocument);
},
_ => (), // TODO: may need to implement more
}
@@ -320,7 +320,7 @@ impl Element {
}
/// Output a document to an `EventWriter`.
- pub fn write_to<W: Write>(&self, writer: &mut EventWriter<W>) -> Result<(), Error> {
+ pub fn write_to<W: Write>(&self, writer: &mut EventWriter<W>) -> Result<()> {
let name = if let Some(ref ns) = self.namespace {
Name::qualified(&self.name, ns, None)
}
@@ -7,33 +7,24 @@ use std::convert::From;
use xml::writer::Error as WriterError;
use xml::reader::Error as ReaderError;
-/// An enum representing the possible errors.
-#[derive(Debug)]
-pub enum Error {
- /// An io::Error.
- IoError(io::Error),
- /// An error in the xml-rs `EventWriter`.
- XmlWriterError(WriterError),
- /// An error in the xml-rs `EventReader`.
- XmlReaderError(ReaderError),
- /// The end of the document has been reached unexpectedly.
- EndOfDocument,
-}
-
-impl From<io::Error> for Error {
- fn from(err: io::Error) -> Error {
- Error::IoError(err)
- }
-}
-
-impl From<WriterError> for Error {
- fn from(err: WriterError) -> Error {
- Error::XmlWriterError(err)
+error_chain! {
+ foreign_links {
+ XmlWriterError(WriterError)
+ /// An error with writing an XML event, from xml::writer::EventWriter.
+ ;
+ XmlReaderError(ReaderError)
+ /// An error with reading an XML event, from xml::reader::EventReader.
+ ;
+ IoError(io::Error)
+ /// An I/O error, from std::io.
+ ;
}
-}
-impl From<ReaderError> for Error {
- fn from(err: ReaderError) -> Error {
- Error::XmlReaderError(err)
+ errors {
+ /// En error which is returned when the end of the document was reached prematurely.
+ EndOfDocument {
+ description("the end of the document has been reached prematurely")
+ display("the end of the document has been reached prematurely")
+ }
}
}