//! Contains common builders for hyper responses. /// Create a response for plaintext internal error. pub fn internal_error>(msg: T) -> hyper::Response { from_template( hyper::StatusCode::INTERNAL_SERVER_ERROR, format!("Internal Server Error: {}", msg.into()), ) } /// Create a json response for service unavailable. pub fn service_unavailable>(msg: T) -> hyper::Response { hyper::Response::builder() .status(hyper::StatusCode::SERVICE_UNAVAILABLE) .header( "Content-Type", hyper::header::HeaderValue::from_static("application/json; charset=utf-8"), ) .body(hyper::Body::from(msg.into())) .expect("Unable to parse response body for type conversion") } /// Create a response for not allowed hosts. pub fn host_not_allowed() -> hyper::Response { from_template( hyper::StatusCode::FORBIDDEN, "Provided Host header is not whitelisted.\n".to_owned(), ) } /// Create a response for unsupported content type. pub fn unsupported_content_type() -> hyper::Response { from_template( hyper::StatusCode::UNSUPPORTED_MEDIA_TYPE, "Supplied content type is not allowed. Content-Type: application/json is required\n" .to_owned(), ) } /// Create a response for disallowed method used. pub fn method_not_allowed() -> hyper::Response { from_template( hyper::StatusCode::METHOD_NOT_ALLOWED, "Used HTTP Method is not allowed. POST or OPTIONS is required\n".to_owned(), ) } /// CORS invalid pub fn invalid_allow_origin() -> hyper::Response { from_template( hyper::StatusCode::FORBIDDEN, "Origin of the request is not whitelisted. CORS headers would not be sent and any side-effects were cancelled as well.\n".to_owned(), ) } /// CORS header invalid pub fn invalid_allow_headers() -> hyper::Response { from_template( hyper::StatusCode::FORBIDDEN, "Requested headers are not allowed for CORS. CORS headers would not be sent and any side-effects were cancelled as well.\n".to_owned(), ) } /// Create a response for bad request pub fn bad_request>(msg: S) -> hyper::Response { from_template(hyper::StatusCode::BAD_REQUEST, msg.into()) } /// Create a response for too large (413) pub fn too_large>(msg: S) -> hyper::Response { from_template(hyper::StatusCode::PAYLOAD_TOO_LARGE, msg.into()) } /// Create a response for a template. fn from_template(status: hyper::StatusCode, body: String) -> hyper::Response { hyper::Response::builder() .status(status) .header( "content-type", hyper::header::HeaderValue::from_static("text/plain; charset=utf-8"), ) .body(hyper::Body::from(body)) // Parsing `StatusCode` and `HeaderValue` is infalliable but // parsing body content is not. .expect("Unable to parse response body for type conversion") }