vercel_runtime/
response.rs1use 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}