use std::io::Cursor;
use std::fmt::Write;
use log;
use rocket::request::Request;
use rocket::response::{Responder, Response};
use rocket::http::{ContentType, Status};
use mvdb::errors as merr;
use geeny_api::errors as gerr;
error_chain!{
links {
Mvdb(merr::Error, merr::ErrorKind);
GeenyApi(gerr::Error, gerr::ErrorKind);
}
}
impl<'r> Responder<'r> for Error {
fn respond_to(self, _: &Request) -> ::std::result::Result<Response<'r>, Status> {
let mut rslt = String::new();
write!(rslt, "Error: {}", self).unwrap();
for ce in self.iter().skip(1) {
write!(rslt, ", caused by: {}", ce).unwrap();
}
log::error!("{}", rslt);
let resp = json!({
"status": "failure",
"message": rslt,
}).to_string();
Ok(
Response::build()
.status(Status::BadRequest)
.header(ContentType::JSON)
.sized_body(Cursor::new(resp))
.finalize(),
)
}
}