Skip to content

Commit

Permalink
Add lambda extractors (#2038)
Browse files Browse the repository at this point in the history
  • Loading branch information
hlbarber authored Nov 30, 2022
1 parent 9ae16e7 commit 97b9bb7
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
52 changes: 52 additions & 0 deletions rust-runtime/aws-smithy-http-server/src/request/lambda.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

//! The [`lambda_http`] types included in [`http::Request`]s when [`LambdaHandler`](crate::routing::LambdaHandler) is
//! used. Each are given a [`FromParts`] implementation for easy use within handlers.
use lambda_http::request::RequestContext;
#[doc(inline)]
pub use lambda_http::{
aws_lambda_events::apigw::{ApiGatewayProxyRequestContext, ApiGatewayV2httpRequestContext},
Context,
};

use super::{extension::MissingExtension, FromParts};
use crate::Extension;

impl<P> FromParts<P> for Context {
type Rejection = MissingExtension;

fn from_parts(parts: &mut http::request::Parts) -> Result<Self, Self::Rejection> {
let Extension(context) = <Extension<Self> as FromParts<P>>::from_parts(parts)?;
Ok(context)
}
}

impl<P> FromParts<P> for ApiGatewayProxyRequestContext {
type Rejection = MissingExtension;

fn from_parts(parts: &mut http::request::Parts) -> Result<Self, Self::Rejection> {
let Extension(context) = <Extension<RequestContext> as FromParts<P>>::from_parts(parts)?;
if let RequestContext::ApiGatewayV1(context) = context {
Ok(context)
} else {
Err(MissingExtension)
}
}
}

impl<P> FromParts<P> for ApiGatewayV2httpRequestContext {
type Rejection = MissingExtension;

fn from_parts(parts: &mut http::request::Parts) -> Result<Self, Self::Rejection> {
let Extension(context) = <Extension<RequestContext> as FromParts<P>>::from_parts(parts)?;
if let RequestContext::ApiGatewayV2(context) = context {
Ok(context)
} else {
Err(MissingExtension)
}
}
}
3 changes: 3 additions & 0 deletions rust-runtime/aws-smithy-http-server/src/request/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ use crate::{rejection::any_rejections, response::IntoResponse};

pub mod connect_info;
pub mod extension;
#[cfg(feature = "aws-lambda")]
#[cfg_attr(docsrs, doc(cfg(feature = "aws-lambda")))]
pub mod lambda;

#[doc(hidden)]
#[derive(Debug)]
Expand Down

0 comments on commit 97b9bb7

Please sign in to comment.