actiondb 0.7.0

A safe and efficient unstructured text (log) parsing library.
Documentation
use matcher::pattern::testmessage;

use serde_json;
use serde_yaml;
use std::fmt;
use std::error;
use std::io;

#[derive(Debug)]
pub enum BuildError {
    TestMessage(testmessage::Error),
    Io(io::Error),
    DeserJson(serde_json::Error),
    DeserYaml(serde_yaml::Error),
    UnsupportedFileExtension,
    NotUtf8FileName,
}

impl From<testmessage::Error> for BuildError {
    fn from(error: testmessage::Error) -> BuildError {
        BuildError::TestMessage(error)
    }
}

impl From<io::Error> for BuildError {
    fn from(error: io::Error) -> BuildError {
        BuildError::Io(error)
    }
}

impl From<serde_json::Error> for BuildError {
    fn from(error: serde_json::Error) -> BuildError {
        BuildError::DeserJson(error)
    }
}

impl From<serde_yaml::Error> for BuildError {
    fn from(error: serde_yaml::Error) -> BuildError {
        BuildError::DeserYaml(error)
    }
}

impl fmt::Display for BuildError {
    fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> {
        match *self {
            BuildError::TestMessage(ref error) => error.fmt(formatter),
            BuildError::Io(ref error) => error.fmt(formatter),
            BuildError::DeserJson(ref error) => error.fmt(formatter),
            BuildError::DeserYaml(ref error) => error.fmt(formatter),
            BuildError::UnsupportedFileExtension =>
                formatter.write_fmt(format_args!("The given file extension is not suppoted")),
            BuildError::NotUtf8FileName =>
                formatter.write_str("The given filename contains non Utf-8 characters"),
        }
    }
}

impl error::Error for BuildError {
    fn description(&self) -> &str {
        match *self {
            BuildError::TestMessage(ref error) => error.description(),
            BuildError::Io(ref error) => error.description(),
            BuildError::DeserJson(ref error) => error.description(),
            BuildError::DeserYaml(ref error) => error.description(),
            BuildError::UnsupportedFileExtension => "The given file extension is not supported",
            BuildError::NotUtf8FileName => "The given filename contains non Utf-8 characters",
        }
    }

    fn cause(&self) -> Option<&error::Error> {
        match *self {
            BuildError::TestMessage(ref error) => error.cause(),
            BuildError::Io(ref error) => error.cause(),
            BuildError::DeserJson(ref error) => error.cause(),
            BuildError::DeserYaml(ref error) => error.cause(),
            BuildError::UnsupportedFileExtension | BuildError::NotUtf8FileName => None,
        }
    }
}