Skip to content

Commit 760ee82

Browse files
PartiallyUntypedAriel Ben-Yehuda
andauthored
avoid using private serde APIs (#1038)
serde broke these in <serde-rs/serde#2980> smithy depends on lambda-http 0.8 until the HTTP 1 migration can be done, so this is needed. Co-authored-by: Ariel Ben-Yehuda <[email protected]>
1 parent 8e6d77c commit 760ee82

File tree

2 files changed

+16
-19
lines changed

2 files changed

+16
-19
lines changed

lambda-http/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ http-body = "0.4"
3131
hyper = "0.14"
3232
lambda_runtime = { path = "../lambda-runtime", version = "0.8.3" }
3333
serde = { version = "1.0", features = ["derive"] }
34-
serde_json = "1.0"
34+
serde_json = { version = "1.0", features = ["raw_value"] }
3535
serde_urlencoded = "0.7"
3636
tokio-stream = "0.1.2"
3737
mime = "0.3"

lambda-http/src/deserializer.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
use crate::request::LambdaRequest;
2+
#[cfg(feature = "alb")]
3+
use aws_lambda_events::alb::AlbTargetGroupRequest;
4+
#[cfg(feature = "apigw_rest")]
5+
use aws_lambda_events::apigw::ApiGatewayProxyRequest;
6+
#[cfg(feature = "apigw_http")]
7+
use aws_lambda_events::apigw::ApiGatewayV2httpRequest;
8+
#[cfg(feature = "apigw_websockets")]
9+
use aws_lambda_events::apigw::ApiGatewayWebsocketProxyRequest;
210
use serde::{de::Error, Deserialize};
11+
use serde_json::value::RawValue;
312

413
const ERROR_CONTEXT: &str = "this function expects a JSON payload from Amazon API Gateway, Amazon Elastic Load Balancer, or AWS Lambda Function URLs, but the data doesn't match any of those services' events";
514

@@ -8,34 +17,22 @@ impl<'de> Deserialize<'de> for LambdaRequest {
817
where
918
D: serde::Deserializer<'de>,
1019
{
11-
let content = match serde::__private::de::Content::deserialize(deserializer) {
12-
Ok(content) => content,
13-
Err(err) => return Err(err),
14-
};
20+
let raw_value: Box<RawValue> = Box::deserialize(deserializer)?;
21+
let data = raw_value.get();
1522
#[cfg(feature = "apigw_rest")]
16-
if let Ok(res) = aws_lambda_events::apigw::ApiGatewayProxyRequest::deserialize(
17-
serde::__private::de::ContentRefDeserializer::<D::Error>::new(&content),
18-
) {
23+
if let Ok(res) = serde_json::from_str::<ApiGatewayProxyRequest>(data) {
1924
return Ok(LambdaRequest::ApiGatewayV1(res));
2025
}
2126
#[cfg(feature = "apigw_http")]
22-
if let Ok(res) = aws_lambda_events::apigw::ApiGatewayV2httpRequest::deserialize(
23-
serde::__private::de::ContentRefDeserializer::<D::Error>::new(&content),
24-
) {
27+
if let Ok(res) = serde_json::from_str::<ApiGatewayV2httpRequest>(data) {
2528
return Ok(LambdaRequest::ApiGatewayV2(res));
2629
}
2730
#[cfg(feature = "alb")]
28-
if let Ok(res) =
29-
aws_lambda_events::alb::AlbTargetGroupRequest::deserialize(serde::__private::de::ContentRefDeserializer::<
30-
D::Error,
31-
>::new(&content))
32-
{
31+
if let Ok(res) = serde_json::from_str::<AlbTargetGroupRequest>(data) {
3332
return Ok(LambdaRequest::Alb(res));
3433
}
3534
#[cfg(feature = "apigw_websockets")]
36-
if let Ok(res) = aws_lambda_events::apigw::ApiGatewayWebsocketProxyRequest::deserialize(
37-
serde::__private::de::ContentRefDeserializer::<D::Error>::new(&content),
38-
) {
35+
if let Ok(res) = serde_json::from_str::<ApiGatewayWebsocketProxyRequest>(data) {
3936
return Ok(LambdaRequest::WebSocket(res));
4037
}
4138

0 commit comments

Comments
 (0)