Skip to main content

apimock_server/response/
json_response.rs

1use std::collections::HashMap;
2
3use hyper::HeaderMap;
4use serde_json::Value;
5
6use crate::{
7    response::error_response::internal_server_error_response, response_handler::ResponseHandler,
8    types::BoxBody,
9};
10
11/// json response
12pub fn json_response(
13    json_str: &str,
14    custom_headers: Option<&HashMap<String, Option<String>>>,
15    request_headers: &HeaderMap,
16    file_path: &str,
17) -> Result<hyper::Response<BoxBody>, hyper::http::Error> {
18    match json5::from_str::<Value>(json_str) {
19        Ok(content) => {
20            let body = content.to_string();
21
22            let mut response_handler = ResponseHandler::default();
23
24            if let Some(custom_headers) = custom_headers.clone() {
25                response_handler = response_handler.with_headers(custom_headers.to_owned());
26            }
27
28            response_handler
29                .with_json_body(body.as_str())
30                .into_response(request_headers)
31        }
32        _ => internal_server_error_response(
33            &format!("{}: invalid json content", file_path),
34            request_headers,
35        ),
36    }
37}