kutil_http/body/
response.rs

1use super::super::errors::*;
2
3use {
4    bytes::*,
5    http::{header::*, response::*, *},
6    std::result::Result,
7};
8
9/// Creates a response with a [Bytes] body.
10///
11/// The `Content-Type` and `Content-Length` headers will be set, overriding existing values.
12///
13/// The response body must implement [From]\<[Bytes]\>.
14pub fn response_from_bytes<BodyT>(
15    body: Bytes,
16    content_type: &str,
17    headers: HeaderMap,
18) -> Result<Response<BodyT>, StatusCode>
19where
20    BodyT: From<Bytes>,
21{
22    let mut builder = Response::builder();
23
24    for (name, value) in headers.iter() {
25        match *name {
26            CONTENT_TYPE | CONTENT_LENGTH => {}
27            _ => builder = builder.header(name, value),
28        };
29    }
30
31    builder
32        .header(CONTENT_TYPE, content_type)
33        .header(CONTENT_LENGTH, body.len())
34        .body(body.into())
35        .map_err_internal_server("build response")
36}