Implement the libstd error trait for errors
This commit is contained in:
parent
902b3c6f8f
commit
78acb5081d
|
@ -47,7 +47,7 @@ use std::collections::TreeMap;
|
||||||
use std::from_str::FromStr;
|
use std::from_str::FromStr;
|
||||||
use std::string;
|
use std::string;
|
||||||
|
|
||||||
pub use parser::{Parser,ParserError};
|
pub use parser::{Parser, ParserError};
|
||||||
pub use serialization::{Encoder, encode, encode_str};
|
pub use serialization::{Encoder, encode, encode_str};
|
||||||
pub use serialization::{Decoder, decode, decode_str};
|
pub use serialization::{Decoder, decode, decode_str};
|
||||||
pub use serialization::{Error, NeedsKey, NoValue};
|
pub use serialization::{Error, NeedsKey, NoValue};
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use std::char;
|
use std::char;
|
||||||
use std::collections::{TreeMap, HashSet};
|
use std::collections::{TreeMap, HashSet};
|
||||||
|
use std::error::Error;
|
||||||
use std::num::FromStrRadix;
|
use std::num::FromStrRadix;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
|
@ -760,6 +761,11 @@ impl<'a> Parser<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Error for ParserError {
|
||||||
|
fn description(&self) -> &str { "TOML parse error" }
|
||||||
|
fn detail(&self) -> Option<String> { Some(self.desc.clone()) }
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use {Table, Parser};
|
use {Table, Parser};
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::collections::TreeMap;
|
use std::collections::TreeMap;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::error::Error as StdError;
|
||||||
|
|
||||||
use serialize;
|
use serialize;
|
||||||
use {Value, Table, Array, Integer, Float, Boolean, Parser, TomlTable};
|
use {Value, Table, Array, Integer, Float, Boolean, Parser, TomlTable};
|
||||||
|
@ -56,7 +57,6 @@ pub struct Decoder {
|
||||||
|
|
||||||
/// Enumeration of errors which can occur while encoding a rust value into a
|
/// Enumeration of errors which can occur while encoding a rust value into a
|
||||||
/// TOML value.
|
/// TOML value.
|
||||||
#[deriving(Show)]
|
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
/// Indication that a key was needed when a value was emitted, but no key
|
/// Indication that a key was needed when a value was emitted, but no key
|
||||||
/// was previously emitted.
|
/// was previously emitted.
|
||||||
|
@ -762,6 +762,39 @@ impl fmt::Show for DecodeError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl StdError for DecodeError {
|
||||||
|
fn description(&self) -> &str {
|
||||||
|
match self.kind {
|
||||||
|
ApplicationError(ref s) => s.as_slice(),
|
||||||
|
ExpectedField(..) => "expected a field",
|
||||||
|
ExpectedType(..) => "expected a type",
|
||||||
|
ExpectedMapKey(..) => "expected a map key",
|
||||||
|
ExpectedMapElement(..) => "expected a map element",
|
||||||
|
NoEnumVariants => "no enum variants to decode to",
|
||||||
|
NilTooLong => "nonzero length string representing nil",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn detail(&self) -> Option<String> { Some(self.to_string()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Show for Error {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
match *self {
|
||||||
|
NeedsKey => write!(f, "need a key to encode"),
|
||||||
|
NoValue => write!(f, "not value to emit for a previous key"),
|
||||||
|
InvalidMapKeyLocation => write!(f, "a map cannot be emitted at \
|
||||||
|
this location"),
|
||||||
|
InvalidMapKeyType => write!(f, "only strings can be used as \
|
||||||
|
key types"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StdError for Error {
|
||||||
|
fn description(&self) -> &str { "TOML encoding error" }
|
||||||
|
fn detail(&self) -> Option<String> { Some(self.to_string()) }
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::collections::{TreeMap, HashSet};
|
use std::collections::{TreeMap, HashSet};
|
||||||
|
|
Loading…
Reference in a new issue