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
use crate::responses::WebResult;
use actix_web::HttpResponse;
use http::StatusCode;

impl From<WebResult> for HttpResponse {
    #[must_use]
    fn from(res: WebResult) -> Self {
        match res {
            WebResult::Ok(v) => {
                let mut resp_builder = Self::Ok();
                if let Some(total) = &v.get("full_count") {
                    resp_builder.set_header("X-Total-Count", total.to_string());
                }
                resp_builder.json(&v)
            }
            WebResult::Err(e) => e
                .errors
                .iter()
                .max_by_key(|e| e.status)
                .map_or_else(
                    || Self::build(StatusCode::INTERNAL_SERVER_ERROR),
                    |large_error| Self::build(large_error.status),
                )
                .json(&e),
        }
    }
}