extern crate walkdir;
mod ast;
mod display;
mod error;
mod spec;
mod tokens;
mod walk;
pub use ast::{Match, Param};
pub use display::{display_error, display_error_for_file, display_error_for_read};
pub use error::At;
pub use error::{LexError, ParseError, TemplateMatchError, TemplateWriteError};
pub use spec::{Item, ItemIter, ItemValuesByKeyIter, Options, Spec};
use std::{fmt, io, path, result};
pub use walk::{walk_spec_dir, SpecPath, SpecWalkIter};
#[derive(Debug)]
pub enum Error {
WalkDir(walkdir::Error),
Io(io::Error),
StripPrefixError(path::StripPrefixError),
Parse {
path: path::PathBuf,
err: error::At<error::ParseError>,
},
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
Error::WalkDir(ref e) => e.fmt(f),
Error::Io(ref e) => e.fmt(f),
Error::StripPrefixError(ref e) => e.fmt(f),
Error::Parse {
ref path,
err: ref e,
} => write!(f, "{} in {:?}", e, path),
}
}
}
impl ::std::error::Error for Error {
fn description(&self) -> &str {
match *self {
Error::WalkDir(ref e) => e.description(),
Error::Io(ref e) => e.description(),
Error::StripPrefixError(ref e) => e.description(),
Error::Parse { ref err, .. } => err.description(),
}
}
}
impl From<walkdir::Error> for Error {
fn from(other: walkdir::Error) -> Error {
Error::WalkDir(other)
}
}
impl From<io::Error> for Error {
fn from(other: io::Error) -> Error {
Error::Io(other)
}
}
impl From<path::StripPrefixError> for Error {
fn from(other: path::StripPrefixError) -> Error {
Error::StripPrefixError(other)
}
}
impl From<(path::PathBuf, error::At<error::ParseError>)> for Error {
fn from((path, other): (path::PathBuf, error::At<error::ParseError>)) -> Error {
Error::Parse {
path: path,
err: other,
}
}
}
pub type Result<T> = result::Result<T, Error>;