diff --git a/lambda-events/src/event/apigw/mod.rs b/lambda-events/src/event/apigw/mod.rs index 36512f9c..f2cb097a 100644 --- a/lambda-events/src/event/apigw/mod.rs +++ b/lambda-events/src/event/apigw/mod.rs @@ -15,7 +15,7 @@ use std::collections::HashMap; #[serde(rename_all = "camelCase")] pub struct ApiGatewayProxyRequest where - T1: DeserializeOwned, + T1: DeserializeOwned + Default, T1: Serialize, { /// The resource path defined in API Gateway @@ -43,7 +43,6 @@ where #[serde(deserialize_with = "deserialize_lambda_map")] #[serde(default)] pub stage_variables: HashMap, - #[serde(default)] #[serde(bound = "")] pub request_context: ApiGatewayProxyRequestContext, #[serde(default)] @@ -335,9 +334,9 @@ pub struct ApiGatewayRequestIdentity { #[serde(rename_all = "camelCase")] pub struct ApiGatewayWebsocketProxyRequest where - T1: DeserializeOwned, + T1: DeserializeOwned + Default, T1: Serialize, - T2: DeserializeOwned, + T2: DeserializeOwned + Default, T2: Serialize, { /// The resource path defined in API Gateway @@ -367,7 +366,7 @@ where #[serde(deserialize_with = "deserialize_lambda_map")] #[serde(default)] pub stage_variables: HashMap, - #[serde(bound = "", default)] + #[serde(bound = "")] pub request_context: ApiGatewayWebsocketProxyRequestContext, #[serde(default)] pub body: Option, diff --git a/lambda-events/src/fixtures/example-sqs-event.json b/lambda-events/src/fixtures/example-sqs-event.json index 732b65c1..eea77f84 100644 --- a/lambda-events/src/fixtures/example-sqs-event.json +++ b/lambda-events/src/fixtures/example-sqs-event.json @@ -37,5 +37,4 @@ } } ] -} - +} \ No newline at end of file diff --git a/lambda-http/src/deserializer.rs b/lambda-http/src/deserializer.rs index 2584c0ad..1b2008c3 100644 --- a/lambda-http/src/deserializer.rs +++ b/lambda-http/src/deserializer.rs @@ -56,7 +56,7 @@ mod tests { fn test_deserialize_apigw_rest() { let data = include_bytes!("../../lambda-events/src/fixtures/example-apigw-request.json"); - let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialze apigw rest data"); + let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialize apigw rest data"); match req { LambdaRequest::ApiGatewayV1(req) => { assert_eq!("12345678912", req.request_context.account_id.unwrap()); @@ -69,7 +69,7 @@ mod tests { fn test_deserialize_apigw_http() { let data = include_bytes!("../../lambda-events/src/fixtures/example-apigw-v2-request-iam.json"); - let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialze apigw http data"); + let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialize apigw http data"); match req { LambdaRequest::ApiGatewayV2(req) => { assert_eq!("123456789012", req.request_context.account_id.unwrap()); @@ -84,7 +84,7 @@ mod tests { "../../lambda-events/src/fixtures/example-alb-lambda-target-request-multivalue-headers.json" ); - let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialze alb rest data"); + let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialize alb rest data"); match req { LambdaRequest::Alb(req) => { assert_eq!( @@ -101,7 +101,7 @@ mod tests { let data = include_bytes!("../../lambda-events/src/fixtures/example-apigw-websocket-request-without-method.json"); - let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialze apigw websocket data"); + let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialize apigw websocket data"); match req { LambdaRequest::WebSocket(req) => { assert_eq!("CONNECT", req.request_context.event_type.unwrap()); @@ -109,4 +109,33 @@ mod tests { other => panic!("unexpected request variant: {:?}", other), } } + + #[test] + #[cfg(feature = "pass_through")] + fn test_deserialize_bedrock_agent() { + let data = include_bytes!("../../lambda-events/src/fixtures/example-bedrock-agent-runtime-event.json"); + + let req: LambdaRequest = + serde_json::from_slice(data).expect("failed to deserialize bedrock agent request data"); + match req { + LambdaRequest::PassThrough(req) => { + assert_eq!(String::from_utf8_lossy(data), req); + } + other => panic!("unexpected request variant: {:?}", other), + } + } + + #[test] + #[cfg(feature = "pass_through")] + fn test_deserialize_sqs() { + let data = include_bytes!("../../lambda-events/src/fixtures/example-sqs-event.json"); + + let req: LambdaRequest = serde_json::from_slice(data).expect("failed to deserialize sqs event data"); + match req { + LambdaRequest::PassThrough(req) => { + assert_eq!(String::from_utf8_lossy(data), req); + } + other => panic!("unexpected request variant: {:?}", other), + } + } }