@@ -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¶meter1=value2¶meter2=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