take advantage of the existing `From<T: ResponseError> for Error` in the implementation of `From<failure::Error>`.

This is better because it's re-using code, but also because my backtrace-handling was buggy.
This commit is contained in:
Christopher Armstrong 2018-02-06 00:48:07 -06:00
parent c16062d6bc
commit 848a83ee70
1 changed files with 17 additions and 1 deletions

View File

@ -102,7 +102,7 @@ impl<T> ResponseError for failure::Compat<T>
impl From<failure::Error> for Error {
fn from(err: failure::Error) -> Error {
Error { cause: Box::new(err.compat()), backtrace: None }
err.compat().into()
}
}
@ -662,11 +662,13 @@ pub fn ErrorInternalServerError<T>(err: T) -> InternalError<T> {
#[cfg(test)]
mod tests {
use std::env;
use std::error::Error as StdError;
use std::io;
use httparse;
use http::{StatusCode, Error as HttpError};
use cookie::ParseError as CookieParseError;
use failure;
use super::*;
#[test]
@ -795,4 +797,18 @@ mod tests {
from!(httparse::Error::TooManyHeaders => ParseError::TooLarge);
from!(httparse::Error::Version => ParseError::Version);
}
#[test]
fn failure_error() {
const NAME: &str = "RUST_BACKTRACE";
let old_tb = env::var(NAME);
env::set_var(NAME, "0");
let error = failure::err_msg("Hello!");
let resp: Error = error.into();
assert_eq!(format!("{:?}", resp), "Compat { error: ErrorMessage { msg: \"Hello!\" } }\n\n");
match old_tb {
Ok(x) => env::set_var(NAME, x),
_ => env::remove_var(NAME),
}
}
}