#![deny(missing_docs)]
use bindgen::BindgenError;
use cc::Error as CcError;
use glob::PatternError;
use std::convert::From;
use std::error::Error as ErrorTrait;
use std::fmt::{Display, Error as FmtError, Formatter};
use std::io::Error as StdIoError;
#[derive(Debug)]
pub enum Error {
BindgenError(BindgenError),
CcError(CcError),
StdIoError(StdIoError),
PatternError(PatternError),
MessageError(String)
}
impl From<BindgenError> for Error {
fn from(err: BindgenError) -> Self
{
Error::BindgenError(err)
}
}
impl From<CcError> for Error {
fn from(err: CcError) -> Self
{
Error::CcError(err)
}
}
impl From<StdIoError> for Error {
fn from(err: StdIoError) -> Self
{
Error::StdIoError(err)
}
}
impl From<PatternError> for Error {
fn from(err: PatternError) -> Self
{
Error::PatternError(err)
}
}
impl From<String> for Error {
fn from(err: String) -> Self
{
Error::MessageError(err)
}
}
impl From<&str> for Error {
fn from(err: &str) -> Self
{
Error::MessageError(String::from(err))
}
}
impl Display for Error {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError>
{
match self {
Error::BindgenError(err) => write!(f, "BindgenError: {}", err),
Error::CcError(err) => write!(f, "CcError: {}", err),
Error::StdIoError(err) => write!(f, "StdIoError: {}", err),
Error::PatternError(err) => write!(f, "PatternError: {}", err),
Error::MessageError(err) => write!(f, "MessageError: {}", err),
}
}
}
impl ErrorTrait for Error {
}
#[cfg(test)]
mod tests {
use bindgen::BindgenError;
use cc::Error as CcError;
use glob::Pattern;
use std::io::{Error as StdIoError, ErrorKind as StdIoErrorKind};
use super::*;
#[test]
fn test_from_bindgen_error()
{
let err = Error::from(BindgenError::ClangDiagnostic(
"emulated by mock".to_string()));
println!("err = {}.", err);
println!("err = {:?}.", err);
}
#[test]
fn test_from_cc_error()
{
let err = Error::from(CcError::from(
StdIoError::new(
StdIoErrorKind::Other,
"emulated by mock"
)));
println!("err = {}.", err);
println!("err = {:?}.", err);
}
#[test]
fn test_from_std_io_error()
{
let err = Error::from(StdIoError::new(
StdIoErrorKind::Other, "emulated by mock"));
println!("err = {}.", err);
println!("err = {:?}.", err);
}
#[test]
fn test_from_pattern_error()
{
let err = Error::from(
Pattern::new("a**")
.err()
.expect("pattern MUST be illegal"));
println!("err = {}.", err);
println!("err = {:?}.", err);
}
#[test]
fn test_from_string_error()
{
let err = Error::from("emulated by mock".to_string());
println!("err = {}.", err);
println!("err = {:?}.", err);
}
#[test]
fn test_from_str_error()
{
let err = Error::from("emulated by mock");
println!("err = {}.", err);
println!("err = {:?}.", err);
}
}