Open
Description
Currently AlbTargetGroupRequest::query_string_parameters
is serialized with the default QueryMap
serializer, which will serialize the value as a list instead of a string.
aws-lambda-rust-runtime/lambda-events/src/event/alb/mod.rs
Lines 19 to 20 in f69280e
It should be serialized like in APIGW event, using query_map::serde::aws_api_gateway_v1::serialize_query_string_parameters
.
aws-lambda-rust-runtime/lambda-events/src/event/apigw/mod.rs
Lines 34 to 35 in f69280e
Minimal repro:
#[cfg(test)]
mod tests {
use aws_lambda_events::alb::{AlbTargetGroupRequest, AlbTargetGroupRequestContext, ElbContext};
use axum::http::{request::Builder, Method};
use std::collections::HashMap;
#[test]
fn test() {
let (parts, body) = Builder::new()
.method(Method::GET)
.uri("https://example.com/")
.header("key", "value")
.body("")
.unwrap()
.into_parts();
let query_string_parameters = HashMap::from([("k".to_string(), "v".to_string())]).into();
let json = serde_json::to_string(&AlbTargetGroupRequest {
http_method: parts.method,
headers: parts.headers,
path: "/".to_string().into(),
query_string_parameters,
body: body.to_string().into(),
is_base64_encoded: false,
request_context: AlbTargetGroupRequestContext {
elb: ElbContext { target_group_arn: None },
},
multi_value_headers: Default::default(),
multi_value_query_string_parameters: Default::default(),
})
.unwrap();
println!("{}", json);
}
}
Got output:
{"httpMethod":"GET","path":"/","queryStringParameters":{"k":["v"]},"multiValueQueryStringParameters":{},"headers":{"key":"value"},"multiValueHeaders":{},"requestContext":{"elb":{"targetGroupArn":null}},"isBase64Encoded":false,"body":""}
Expected: the value of "k"
in queryStringParameters
should be a string "v"
instead of a list ["v"]
.
Metadata
Metadata
Assignees
Labels
No labels