Repository navigation
Accessing RequestContext #443
Description
Hi,
A question not an issue - still learning rust as well so bear with me :)
could someone help understand how the Object models work with the request types
I am calling my handler function like this
lambda_http::run(service_fn(|event: Request| process_request(event))).await?;
so passing in an event object of type Request, the event is coming from an APIGW Lambda Proxy Integration
within the handler if i look at the request context using event.request_context() -> which returns the object type RequestContext
debug!("TEST### {:?}", event.request_context());
i can see this
ApiGatewayV1("ApiGatewayProxyRequestContext"{
"account_id":"Some(""1231321232123"")",
"resource_id":"Some(""xxxxx"")",
"operation_name":"None",
"stage":"Some(""dev"")",
"domain_name":"Some(""11111111111.amazonaws.com"")",
"domain_prefix":"Some(""dddddd"")",
"request_id":"Some(""xxxxxxxxxx"")",
"protocol":"Some(""HTTP/1.1"")",
"identity":"ApiGatewayRequestIdentity"{
"cognito_identity_pool_id":"None",
"account_id":"None",
"cognito_identity_id":"None",
"caller":"None",
"api_key":"None",
"api_key_id":"None",
"access_key":"None",
"source_ip":"Some(""1111111111"")",
"cognito_authentication_type":"None",
"cognito_authentication_provider":"None",
"user_arn":"None",
"user_agent":"Some(""PostmanRuntime/7.28.4"")",
"user":"None"
},
"resource_path":"Some(""/ledger/{id}"")",
"authorizer":{
"accesskey":"String(""hhhhhhhh"")",
"secretkey":"String(""lllllll"")",
"tenantId":"String(""1234567xyz"")",
"integrationLatency":Number(370),
"principalId":"String(""User|bbbb.am"")",
"sessiontoken":"String(""hhhhhhhhh"")",
"userName":"String(""niro.am"")"
},
"http_method":"GET",
"request_time":"Some(""09/Mar/2022:20:20:45 +0000"")",
"request_time_epoch":1646857245706,
"apiid":"Some(""hhhhhhhh"")"
})
Can anyone point me in the right direction on how you access the data inside the ApiGatewayProxyRequestContext object ? The generic RequestContext object itself does not seem to have any way to get the data ?
Activity
nmoutschen commentedon Mar 10, 2022
Hey @niroam !
The
RequestContextis an enum, and the actual data could vary based on the source of the call (API Gateway REST, HTTP, or WebSockets APIs, or an ALB). To access the inner data, you'll need to either useif letormatch. If you know for sure which variant it will be and don't plan on changing it, I'd recommend usingif let.E.g. with
if let:E.g. with
match: