RequestExt

Trait RequestExt 

Source
pub trait RequestExt {
    // Required methods
    fn query_string_parameters(&self) -> StrMap;
    fn with_query_string_parameters<Q>(self, parameters: Q) -> Self
       where Q: Into<StrMap>;
    fn path_parameters(&self) -> StrMap;
    fn with_path_parameters<P>(self, parameters: P) -> Self
       where P: Into<StrMap>;
    fn stage_variables(&self) -> StrMap;
    fn request_context(&self) -> RequestContext;
    fn payload<D>(&self) -> Result<Option<D>, PayloadError>
       where for<'de> D: Deserialize<'de>;
}
Expand description

Extentions for lambda_http::Request structs that provide access to API gateway and ALB features.

§Examples

A request’s body can be deserialized if its correctly encoded as per
the request’s Content-Type header. The two supported content types are application/x-www-form-urlencoded and application/json.

The following handler will work an http request body of x=1&y=2 as well as {"x":1, "y":2} respectively.

use lambda_http::{handler, lambda_runtime::{self, Context}, Body, IntoResponse, Request, Response, RequestExt};
use serde::Deserialize;

type Error = Box<dyn std::error::Error + Send + Sync + 'static>;

#[derive(Debug,Deserialize,Default)]
struct Args {
  #[serde(default)]
  x: usize,
  #[serde(default)]
  y: usize
}

#[tokio::main]
async fn main() -> Result<(), Error> {
  lambda_runtime::run(handler(add)).await?;
  Ok(())
}

async fn add(
  request: Request,
  _: Context
) -> Result<Response<Body>, Error> {
  let args: Args = request.payload()
    .unwrap_or_else(|_parse_err| None)
    .unwrap_or_default();
  Ok(
     Response::new(
       format!(
         "{} + {} = {}",
         args.x,
         args.y,
         args.x + args.y
       ).into()
     )
  )
}

Required Methods§

Source

fn query_string_parameters(&self) -> StrMap

Return pre-parsed http query string parameters, parameters provided after the ? portion of a url, associated with the API gateway request.

The yielded value represents both single and multi-valued parameters alike. When multiple query string parameters with the same name are expected, query_string_parameters().get_all("many") to retrieve them all.

No query parameters will yield an empty StrMap.

Source

fn with_query_string_parameters<Q>(self, parameters: Q) -> Self
where Q: Into<StrMap>,

Configures instance with query string parameters under #[cfg(test)] configurations

This is intended for use in mock testing contexts.

Source

fn path_parameters(&self) -> StrMap

Return pre-extracted path parameters, parameter provided in url placeholders /foo/{bar}/baz/{boom}, associated with the API gateway request. No path parameters will yield an empty StrMap

These will always be empty for ALB triggered requests

Source

fn with_path_parameters<P>(self, parameters: P) -> Self
where P: Into<StrMap>,

Configures instance with path parameters under #[cfg(test)] configurations

This is intended for use in mock testing contexts.

Source

fn stage_variables(&self) -> StrMap

Return stage variables associated with the API gateway request. No stage parameters will yield an empty StrMap

These will always be empty for ALB triggered requests

Source

fn request_context(&self) -> RequestContext

Return request context data assocaited with the ALB or API gateway request

Source

fn payload<D>(&self) -> Result<Option<D>, PayloadError>
where for<'de> D: Deserialize<'de>,

Return the Result of a payload parsed into a serde Deserializeable type

Currently only application/x-www-form-urlencoded and application/json flavors of content type are supported

A PayloadError will be returned for undeserializable payloads. If no body is provided, Ok(None) will be returned.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl RequestExt for Request<Body>

Source§

fn query_string_parameters(&self) -> StrMap

Source§

fn with_query_string_parameters<Q>(self, parameters: Q) -> Self
where Q: Into<StrMap>,

Source§

fn path_parameters(&self) -> StrMap

Source§

fn with_path_parameters<P>(self, parameters: P) -> Self
where P: Into<StrMap>,

Source§

fn stage_variables(&self) -> StrMap

Source§

fn request_context(&self) -> RequestContext

Source§

fn payload<D>(&self) -> Result<Option<D>, PayloadError>
where for<'de> D: Deserialize<'de>,

Implementors§