teo_runtime/response/
error.rs

1use hyper::header::CONTENT_TYPE;
2use mime::APPLICATION_JSON;
3use teo_result::Error;
4use crate::response::Response;
5use crate::{teon, Value};
6
7impl From<Error> for Response {
8    fn from(value: Error) -> Self {
9        let code = value.code;
10        let t = value.inferred_title();
11        let msg = value.message();
12        let errors = value.errors.as_ref().map(|e| Value::Dictionary(e.iter().map(|(k ,v)| (k.clone(), Value::String(v.clone()))).collect()));
13        let mut teon_value = teon!({
14            "type": t.as_ref(),
15            "message": msg,
16        });
17        if let Some(errors) = errors {
18            teon_value["errors"] = errors;
19        }
20        let response = Response::teon(teon_value);
21        response.headers().insert(CONTENT_TYPE.as_str(), APPLICATION_JSON.essence_str()).unwrap();
22        response.set_code(code);
23        response
24    }
25}