diff --git a/parser/src/emitter.rs b/parser/src/emitter.rs index 7d2ec0a..45f2024 100644 --- a/parser/src/emitter.rs +++ b/parser/src/emitter.rs @@ -1,5 +1,6 @@ -use std::fmt; +use std::fmt::{self, Display}; use std::convert::From; +use std::error::Error; use yaml::{Hash, Yaml}; #[derive(Copy, Clone, Debug)] @@ -8,6 +9,24 @@ pub enum EmitError { BadHashmapKey, } +impl Error for EmitError { + fn description(&self) -> &str { + match *self { + EmitError::FmtError(ref err) => err.description(), + EmitError::BadHashmapKey => "bad hashmap key", + } + } +} + +impl Display for EmitError { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + match *self { + EmitError::FmtError(ref err) => Display::fmt(err, formatter), + EmitError::BadHashmapKey => formatter.write_str("bad hashmap key"), + } + } +} + impl From for EmitError { fn from(f: fmt::Error) -> Self { EmitError::FmtError(f)