osm_xml/
error.rs

1extern crate xml;
2
3use std::num::{ParseFloatError, ParseIntError};
4
5#[derive(Debug)]
6pub enum Error {
7    BoundsMissing(ErrorReason),
8    MalformedTag(ErrorReason),
9    MalformedNode(ErrorReason),
10    MalformedWay(ErrorReason),
11    MalformedRelation(ErrorReason),
12    UnknownElement,
13    XmlParseError(xml::reader::Error),
14}
15
16use std::fmt;
17
18#[derive(Debug)]
19pub enum ErrorReason {
20    ParseFloat(ParseFloatError),
21    ParseInt(ParseIntError),
22    IllegalNesting,
23    Missing,
24}
25
26impl From<ParseFloatError> for ErrorReason {
27    fn from(err: ParseFloatError) -> ErrorReason {
28        ErrorReason::ParseFloat(err)
29    }
30}
31
32impl From<ParseIntError> for ErrorReason {
33    fn from(err: ParseIntError) -> ErrorReason {
34        ErrorReason::ParseInt(err)
35    }
36}
37
38impl From<xml::reader::Error> for Error {
39    fn from(err: xml::reader::Error) -> Error {
40        Error::XmlParseError(err)
41    }
42}
43
44impl fmt::Display for Error {
45    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
46        use Error::*;
47        match *self {
48            BoundsMissing(ref reason) => write!(f, "OSM XML error: Missing bounds: {:?}", reason),
49            MalformedTag(ref reason) => write!(f, "OSM XML error: Malformed tag: {:?}", reason),
50            MalformedNode(ref reason) => write!(f, "OSM XML error: Malformed node: {:?}", reason),
51            MalformedWay(ref reason) => write!(f, "OSM XML error: Malformed way: {:?}", reason),
52            MalformedRelation(ref reason) => write!(f, "OSM XML error: Malformed relation: {:?}", reason),
53            UnknownElement => write!(f, "OSM XML error: Unknown XML element"),
54            XmlParseError(ref reason) => write!(f, "OSM XML parse error: {}", reason),
55        }
56        
57    }
58}
59
60impl ::std::error::Error for Error {
61    fn description(&self) -> &str {
62        "OSM XML error"
63    }
64
65    fn cause(&self) -> Option<&::std::error::Error> {
66        None
67    }
68}