vercel_runtime/
response.rs

1use lambda_http::http::{
2    header::{HeaderMap, HeaderValue},
3    Response,
4};
5use lambda_http::Body;
6use serde::Serialize;
7
8#[derive(Serialize, Debug)]
9#[serde(rename_all = "camelCase")]
10pub struct EventResponse {
11    pub status_code: u16,
12    #[serde(
13        skip_serializing_if = "HeaderMap::is_empty",
14        with = "http_serde::header_map"
15    )]
16    pub headers: HeaderMap<HeaderValue>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub body: Option<Body>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub encoding: Option<String>,
21}
22
23impl Default for EventResponse {
24    fn default() -> Self {
25        Self {
26            status_code: 200,
27            headers: Default::default(),
28            body: Default::default(),
29            encoding: Default::default(),
30        }
31    }
32}
33
34impl<T> From<Response<T>> for EventResponse
35where
36    T: Into<Body>,
37{
38    fn from(value: Response<T>) -> Self {
39        let (parts, bod) = value.into_parts();
40        let (encoding, body) = match bod.into() {
41            Body::Empty => (None, None),
42            b @ Body::Text(_) => (None, Some(b)),
43            b @ Body::Binary(_) => (Some("base64".to_string()), Some(b)),
44        };
45        EventResponse {
46            status_code: parts.status.as_u16(),
47            body,
48            headers: parts.headers,
49            encoding,
50        }
51    }
52}