extern crate ferrum;
use std::error::Error;
use std::fmt::{self, Debug};
use ferrum::*;
struct ErrorHandler;
struct ErrorProducer;
#[derive(Debug)]
struct StringError(String);
impl fmt::Display for StringError {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
Debug::fmt(self, formatter)
}
}
impl Error for StringError {
fn description(&self) -> &str {
&*self.0
}
}
impl Handler for ErrorHandler {
fn handle(&self, _: &mut Request) -> FerrumResult<Response> {
Ok(Response::new())
}
}
impl BeforeMiddleware for ErrorProducer {
fn before(&self, _: &mut Request) -> FerrumResult<()> {
Err(FerrumError::new(
StringError("Error".to_string()),
Some(Response::new().with_status(StatusCode::BadRequest))
))
}
}
fn main() {
let mut chain = Chain::new(ErrorHandler);
chain.link_before(ErrorProducer);
Ferrum::new(chain).http("localhost:3000").unwrap();
}