1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
use crate::Response; use std::{error, fmt}; pub trait Responder { fn to_response(self) -> Response; } impl Responder for Response { fn to_response(self) -> Response { self } } impl Responder for &str { fn to_response(self) -> Response { Response::from(self.to_string()) } } impl Responder for String { fn to_response(self) -> Response { Response::from(self) } } impl Responder for usize { fn to_response(self) -> Response { Response::from(self) } } impl<T: Responder, E: error::Error> Responder for Result<T, E> { fn to_response(self) -> Response { match self { Err(e) => Response::from_error(e), Ok(s) => s.to_response(), } } } impl<T: Responder> Responder for Option<T> { fn to_response(self) -> Response { match self { None => Response::from(404), Some(s) => s.to_response(), } } }