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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
use core::{JsonError, QueryParseError, Request, Response}; use hyper::{ self, header::{HeaderValue, CONTENT_TYPE}, Body, }; use mime; use serde::ser::Serialize; use serde_json::to_vec; impl<T: Serialize> From<(u16, T)> for Response { fn from(tuple: (u16, T)) -> Response { let body = to_vec(&tuple.1).unwrap(); let mut res = Response::new(); res.headers_mut().insert( CONTENT_TYPE, HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), ); res.with_status(tuple.0).with_body(body) } } #[cfg(feature = "unstable")] impl<T: Serialize> From<T> for Response { default fn from(json: T) -> Response { let body = to_vec(&json).unwrap(); let mut res = Response::new(); res.headers_mut().insert( CONTENT_TYPE, HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), ); res.with_body(body) } } impl From<Response> for hyper::Response<Body> { fn from(res: Response) -> hyper::Response<Body> { let Response { parts, body } = res; hyper::Response::from_parts(parts, body) } } impl From<hyper::Request<Body>> for Request { fn from(req: hyper::Request<Body>) -> Request { let (parts, body) = req.into_parts(); let request = Request::new(parts, body); request } } impl From<JsonError> for Response { fn from(error: JsonError) -> Response { match error { JsonError::None => { error!("No json body"); let json = json!({ "error": "Json was empty", }); let body = to_vec(&json).unwrap(); let mut res = Response::new(); res.headers_mut().insert( CONTENT_TYPE, HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), ); res.badRequest().with_body(body) } JsonError::Err(e) => { error!("serde deserialization error: {}", e); let json = json!({ "error": format!("{}", e), }); let body = to_vec(&json).unwrap(); let mut res = Response::new(); res.headers_mut().insert( CONTENT_TYPE, HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), ); res.badRequest().with_body(body) } } } } impl From<QueryParseError> for Response { fn from(error: QueryParseError) -> Response { match error { QueryParseError::None => { error!("No query string"); let json = json!({ "error": "query data was empty", }); let body = to_vec(&json).unwrap(); let mut res = Response::new(); res.headers_mut().insert( CONTENT_TYPE, HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), ); res.badRequest().with_body(body) } QueryParseError::Err(err) => { error!("Error deserializing query: {}", err); let json = json!({ "error": format!("{}", err), }); let body = to_vec(&json).unwrap(); let mut res = Response::new(); res.headers_mut().insert( CONTENT_TYPE, HeaderValue::from_str(mime::APPLICATION_JSON.as_ref()).unwrap(), ); res.badRequest().with_body(body) } } } }