Skip to content

Commit 1427f57

Browse files
committed
fix: add support for null/invalid type for headers
1 parent 154cf31 commit 1427f57

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

lambda-http/src/request.rs

+45-1
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ where
352352
}
353353
}
354354

355-
deserializer.deserialize_map(HeaderVisitor)
355+
Ok(deserializer.deserialize_map(HeaderVisitor).unwrap_or_default())
356356
}
357357

358358
/// deserializes (json) null values to their default values
@@ -633,6 +633,13 @@ mod tests {
633633
let req = result.expect("failed to parse request");
634634
assert_eq!(req.method(), "GET");
635635
assert_eq!(req.uri(), "https://xxx.execute-api.us-east-1.amazonaws.com/");
636+
637+
// Ensure this is an APIGWv2 request
638+
let req_context = req.request_context();
639+
assert!(match req_context {
640+
RequestContext::ApiGatewayV2(_) => true,
641+
_ => false,
642+
}, "expected ApiGatewayV2 context, got {:?}", req_context);
636643
}
637644

638645
#[test]
@@ -657,6 +664,13 @@ mod tests {
657664
assert_eq!(req.method(), "POST");
658665
assert_eq!(req.uri(), "https://id.execute-api.us-east-1.amazonaws.com/my/path?parameter1=value1&parameter1=value2&parameter2=value");
659666
assert_eq!(cookie_header, Ok("cookie1=value1;cookie2=value2"));
667+
668+
// Ensure this is an APIGWv2 request
669+
let req_context = req.request_context();
670+
assert!(match req_context {
671+
RequestContext::ApiGatewayV2(_) => true,
672+
_ => false,
673+
}, "expected ApiGatewayV2 context, got {:?}", req_context);
660674
}
661675

662676
#[test]
@@ -678,6 +692,13 @@ mod tests {
678692
req.uri(),
679693
"https://wt6mne2s9k.execute-api.us-west-2.amazonaws.com/test/hello"
680694
);
695+
696+
// Ensure this is an APIGW request
697+
let req_context = req.request_context();
698+
assert!(match req_context {
699+
RequestContext::ApiGateway(_) => true,
700+
_ => false,
701+
}, "expected ApiGateway context, got {:?}", req_context);
681702
}
682703

683704
#[test]
@@ -695,6 +716,13 @@ mod tests {
695716
let req = result.expect("failed to parse request");
696717
assert_eq!(req.method(), "GET");
697718
assert_eq!(req.uri(), "https://lambda-846800462-us-east-2.elb.amazonaws.com/");
719+
720+
// Ensure this is an ALB request
721+
let req_context = req.request_context();
722+
assert!(match req_context {
723+
RequestContext::Alb(_) => true,
724+
_ => false,
725+
}, "expected Alb context, got {:?}", req_context);
698726
}
699727

700728
#[test]
@@ -808,4 +836,20 @@ mod tests {
808836
Test { foo: HashMap::new() }
809837
)
810838
}
839+
840+
#[test]
841+
fn deserialize_null_headers() {
842+
#[derive(Debug, PartialEq, Deserialize)]
843+
struct Test {
844+
#[serde(deserialize_with = "deserialize_headers")]
845+
headers: http::HeaderMap,
846+
}
847+
848+
assert_eq!(
849+
serde_json::from_str::<Test>(r#"{"headers":null}"#).expect("failed to deserialize"),
850+
Test {
851+
headers: http::HeaderMap::new()
852+
}
853+
)
854+
}
811855
}

0 commit comments

Comments
 (0)