Add: EntryHeader::parse()
Introduce Error + Error-kind for it, return Result<> from the ::parse() function.
This commit is contained in:
parent
b44fd9fec0
commit
6be3011e85
1 changed files with 84 additions and 0 deletions
|
@ -1,5 +1,75 @@
|
|||
use std::error::Error;
|
||||
use std::result::Result as RResult;
|
||||
|
||||
use toml::Table;
|
||||
|
||||
pub mod error {
|
||||
use std::fmt::{Debug, Display, Formatter};
|
||||
use std::fmt;
|
||||
use std::error::Error;
|
||||
use toml;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum ParserErrorKind {
|
||||
TOMLParserErrors,
|
||||
MissingMainSection,
|
||||
}
|
||||
|
||||
pub struct ParserError {
|
||||
kind: ParserErrorKind,
|
||||
cause: Option<Box<Error>>,
|
||||
}
|
||||
|
||||
impl ParserError {
|
||||
|
||||
pub fn new(k: ParserErrorKind, cause: Option<Box<Error>>) -> ParserError {
|
||||
ParserError {
|
||||
kind: k,
|
||||
cause: cause,
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
impl Debug for ParserError {
|
||||
|
||||
fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> {
|
||||
try!(write!(f, "{:?}", self.description()));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
impl Display for ParserError {
|
||||
|
||||
fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> {
|
||||
try!(write!(f, "{}", self.description()));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
impl Error for ParserError {
|
||||
|
||||
fn description(&self) -> &str {
|
||||
match self.kind {
|
||||
ParserErrorKind::MissingMainSection => "Missing main section",
|
||||
ParserErrorKind::TOMLParserErrors => "Several TOML-Parser-Errors",
|
||||
}
|
||||
}
|
||||
|
||||
fn cause(&self) -> Option<&Error> {
|
||||
self.cause.as_ref().map(|e| &**e)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
use self::error::ParserErrorKind;
|
||||
use self::error::ParserError;
|
||||
|
||||
/**
|
||||
* EntryHeader
|
||||
*
|
||||
|
@ -11,6 +81,11 @@ pub struct EntryHeader {
|
|||
toml: Table,
|
||||
}
|
||||
|
||||
pub type Result<V> = RResult<V, error::ParserError>;
|
||||
|
||||
/**
|
||||
* Wrapper type around file header (TOML) object
|
||||
*/
|
||||
impl EntryHeader {
|
||||
|
||||
/**
|
||||
|
@ -29,4 +104,13 @@ impl EntryHeader {
|
|||
&self.toml
|
||||
}
|
||||
|
||||
pub fn parse(s: &str) -> Result<EntryHeader> {
|
||||
use toml::Parser;
|
||||
|
||||
let mut parser = Parser::new(s);
|
||||
parser.parse()
|
||||
.ok_or(ParserError::new(ParserErrorKind::TOMLParserErrors, None))
|
||||
.map(|table| EntryHeader::new(table))
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue