From 641cc164a83eb5cb73e34287f03835154d78a07e Mon Sep 17 00:00:00 2001 From: kdnakt Date: Sun, 11 Feb 2024 15:00:22 +0900 Subject: [PATCH] Add websocket event fields for route --- lambda-events/src/event/apigw/mod.rs | 14 ++++++++ ...gw-websocket-request-disconnect-route.json | 33 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 lambda-events/src/fixtures/example-apigw-websocket-request-disconnect-route.json diff --git a/lambda-events/src/event/apigw/mod.rs b/lambda-events/src/event/apigw/mod.rs index f2cb097a..22c508b2 100644 --- a/lambda-events/src/event/apigw/mod.rs +++ b/lambda-events/src/event/apigw/mod.rs @@ -433,6 +433,10 @@ where pub route_key: Option, #[serde(default)] pub status: Option, + #[serde(default)] + pub disconnect_status_code: Option, + #[serde(default)] + pub disconnect_reason: Option, } /// `ApiGatewayCustomAuthorizerRequestTypeRequestIdentity` contains identity information for the request caller including certificate information if using mTLS. @@ -936,6 +940,16 @@ mod test { assert_eq!(parsed, reparsed); } + #[test] + #[cfg(feature = "apigw")] + fn example_apigw_websocket_request_disconnect_route() { + let data = include_bytes!("../../fixtures/example-apigw-websocket-request-disconnect-route.json"); + let parsed: ApiGatewayWebsocketProxyRequest = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: ApiGatewayWebsocketProxyRequest = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); + } + #[test] #[cfg(feature = "apigw")] fn example_apigw_v2_custom_authorizer_v1_request() { diff --git a/lambda-events/src/fixtures/example-apigw-websocket-request-disconnect-route.json b/lambda-events/src/fixtures/example-apigw-websocket-request-disconnect-route.json new file mode 100644 index 00000000..3a6f0cee --- /dev/null +++ b/lambda-events/src/fixtures/example-apigw-websocket-request-disconnect-route.json @@ -0,0 +1,33 @@ +{ + "headers": { + "Host": "abcd1234.execute-api.us-east-1.amazonaws.com", + "x-api-key": "", + "X-Forwarded-For": "", + "x-restapi": "" + }, + "multiValueHeaders": { + "Host": [ "abcd1234.execute-api.us-east-1.amazonaws.com" ], + "x-api-key": [ "" ], + "X-Forwarded-For": [ "" ], + "x-restapi": [ "" ] + }, + "requestContext": { + "routeKey": "$disconnect", + "disconnectStatusCode": 1005, + "eventType": "DISCONNECT", + "extendedRequestId": "ABCD1234=", + "requestTime": "09/Feb/2024:18:23:28 +0000", + "messageDirection": "IN", + "disconnectReason": "Client-side close frame status not set", + "stage": "prod", + "connectedAt": 1707503007396, + "requestTimeEpoch": 1707503008941, + "identity": { "sourceIp": "192.0.2.1" }, + "requestId": "ABCD1234=", + "domainName": "abcd1234.execute-api.us-east-1.amazonaws.com", + "connectionId": "AAAA1234=", + "apiId": "abcd1234" + }, + "isBase64Encoded": false +} + \ No newline at end of file