Skip to main content

Adapter

Struct Adapter 

Source
pub struct Adapter<C, B> { /* private fields */ }
Expand description

The Lambda Web Adapter.

This is the main struct that handles forwarding Lambda events to your web application. It implements the tower::Service trait, allowing it to be used with the Lambda runtime.

§Type Parameters

§Lifecycle

  1. Create an adapter with Adapter::new()
  2. Register as a Lambda extension with Adapter::register_default_extension()
  3. Wait for the web app to be ready with Adapter::check_init_health()
  4. Start processing events with Adapter::run()

§Examples

use lambda_web_adapter::{Adapter, AdapterOptions};

let options = AdapterOptions::default();
let mut adapter = Adapter::new(&options)?;

adapter.register_default_extension();
adapter.check_init_health().await;
adapter.run().await

Implementations§

Source§

impl Adapter<HttpConnector, Body>

Source

pub fn new( options: &AdapterOptions, ) -> Result<Adapter<HttpConnector, Body>, Error>

Creates a new HTTP Adapter instance.

This function initializes a new HTTP client configured to communicate with your web application. The client uses connection pooling with a 4-second idle timeout for optimal Lambda performance.

§Arguments
  • options - Configuration options for the adapter
§Returns

Returns Ok(Adapter) on success, or an error if the configuration is invalid.

§Errors

Returns an error if:

  • The configured host, port, or readiness check path contain invalid URL characters
  • TCP protocol is configured but the URL is missing host or port
§Examples
use lambda_web_adapter::{Adapter, AdapterOptions};

let options = AdapterOptions::default();
let adapter = Adapter::new(&options).expect("Failed to create adapter");
Source§

impl Adapter<HttpConnector, Body>

Source

pub fn register_default_extension(&self)

Registers the adapter as a Lambda extension.

Lambda extensions are loaded before the function handler and can perform initialization tasks. This registration ensures the adapter is ready to receive events before your function starts processing.

The registration happens asynchronously in a background task. If registration fails, the process will exit with code 1 to signal Lambda that initialization failed.

§Panics

This method spawns a background task that will call std::process::exit(1) if extension registration fails, terminating the Lambda execution environment.

Source

pub async fn check_init_health(&mut self)

Checks if the web application is ready during Lambda initialization.

This method performs readiness checks against your web application using the configured protocol (HTTP or TCP) and endpoint.

§Async Initialization

If async_init is enabled in the adapter options, this method will:

  • Attempt readiness checks for up to 9.8 seconds
  • Return early if the timeout is reached (to avoid Lambda’s 10s init timeout)
  • Allow the application to continue booting in the background

The first request will re-check readiness if the application wasn’t ready during initialization.

§Examples
use lambda_web_adapter::{Adapter, AdapterOptions};

let options = AdapterOptions::default();
let mut adapter = Adapter::new(&options)?;
adapter.check_init_health().await;
Source

pub async fn run(self) -> Result<(), Error>

Starts the adapter and begins processing Lambda events.

This method blocks and runs the Lambda runtime loop, receiving events and forwarding them to your web application.

§Safety

If AWS_LWA_LAMBDA_RUNTIME_API_PROXY is set, Adapter::apply_runtime_proxy_config() must be called BEFORE starting the tokio runtime to avoid race conditions.

§Returns

Returns Ok(()) when the Lambda runtime shuts down gracefully, or an error if there’s a fatal issue with the runtime.

§Examples
use lambda_web_adapter::{Adapter, AdapterOptions};

let options = AdapterOptions::default();
let adapter = Adapter::new(&options)?;
adapter.run().await
Source

pub fn apply_runtime_proxy_config()

Applies runtime API proxy configuration from environment variables.

If AWS_LWA_LAMBDA_RUNTIME_API_PROXY is set, this method overwrites AWS_LAMBDA_RUNTIME_API to redirect Lambda runtime calls through the proxy.

§Important

This method must be called before starting the tokio runtime to avoid race conditions with environment variable modification in a multi-threaded context.

§Safety Note

This function uses std::env::set_var which modifies process-wide state. In future Rust versions, this will be marked unsafe due to potential race conditions. Calling this before spawning any threads ensures safety.

§Examples
use lambda_web_adapter::Adapter;

fn main() {
    // Call before starting tokio runtime
    Adapter::apply_runtime_proxy_config();

    let runtime = tokio::runtime::Builder::new_multi_thread()
        .enable_all()
        .build()
        .unwrap();

    runtime.block_on(async {
        // ... adapter setup and run
    });
}

Trait Implementations§

Source§

impl<C: Clone, B: Clone> Clone for Adapter<C, B>

Source§

fn clone(&self) -> Adapter<C, B>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Service<Request<Body>> for Adapter<HttpConnector, Body>

Implementation of tower::Service for the adapter.

This allows the adapter to be used directly with the Lambda runtime, which expects a Service that can handle Lambda events.

Source§

type Response = Response<Incoming>

Responses given by the service.
Source§

type Error = Box<dyn Error + Sync + Send>

Errors produced by the service.
Source§

type Future = Pin<Box<dyn Future<Output = Result<<Adapter<HttpConnector, Body> as Service<Request<Body>>>::Response, <Adapter<HttpConnector, Body> as Service<Request<Body>>>::Error>> + Send>>

The future response value.
Source§

fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>

Returns Poll::Ready(Ok(())) when the service is able to process requests. Read more
Source§

fn call(&mut self, event: Request) -> Self::Future

Process the request and return the response asynchronously. Read more

Auto Trait Implementations§

§

impl<C, B> Freeze for Adapter<C, B>

§

impl<C, B> !RefUnwindSafe for Adapter<C, B>

§

impl<C, B> Send for Adapter<C, B>
where C: Sync + Send, B: Send,

§

impl<C, B> Sync for Adapter<C, B>
where C: Sync + Send, B: Send,

§

impl<C, B> Unpin for Adapter<C, B>

§

impl<C, B> UnsafeUnpin for Adapter<C, B>

§

impl<C, B> !UnwindSafe for Adapter<C, B>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, Request> ServiceExt<Request> for T
where T: Service<Request> + ?Sized,

Source§

fn ready(&mut self) -> Ready<'_, Self, Request>
where Self: Sized,

Yields a mutable reference to the service when it is ready to accept a request.
Source§

fn ready_oneshot(self) -> ReadyOneshot<Self, Request>
where Self: Sized,

Yields the service when it is ready to accept a request.
Source§

fn oneshot(self, req: Request) -> Oneshot<Self, Request>
where Self: Sized,

Consume this Service, calling it with the provided request once it is ready.
Source§

fn call_all<S>(self, reqs: S) -> CallAll<Self, S>
where Self: Sized, S: Stream<Item = Request>,

Process all requests from the given Stream, and produce a Stream of their responses. Read more
Source§

fn and_then<F>(self, f: F) -> AndThen<Self, F>
where Self: Sized, F: Clone,

Executes a new future after this service’s future resolves. This does not alter the behaviour of the poll_ready method. Read more
Source§

fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
where Self: Sized, F: FnOnce(Self::Response) -> Response + Clone,

Maps this service’s response value to a different value. This does not alter the behaviour of the poll_ready method. Read more
Source§

fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
where Self: Sized, F: FnOnce(Self::Error) -> Error + Clone,

Maps this service’s error value to a different value. This does not alter the behaviour of the poll_ready method. Read more
Source§

fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
where Self: Sized, Error: From<Self::Error>, F: FnOnce(Result<Self::Response, Self::Error>) -> Result<Response, Error> + Clone,

Maps this service’s result type (Result<Self::Response, Self::Error>) to a different value, regardless of whether the future succeeds or fails. Read more
Source§

fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
where Self: Sized, F: FnMut(NewRequest) -> Request,

Composes a function in front of the service. Read more
Source§

fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
where Self: Sized, Error: From<Self::Error>, F: FnOnce(Result<Self::Response, Self::Error>) -> Fut + Clone, Fut: Future<Output = Result<Response, Error>>,

Composes an asynchronous function after this service. Read more
Source§

fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
where Self: Sized, F: FnMut(Self::Future) -> Fut, Error: From<Self::Error>, Fut: Future<Output = Result<Response, Error>>,

Composes a function that transforms futures produced by the service. Read more
Source§

fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>
where Self: Sized + Send + 'static, Self::Future: Send + 'static,

Convert the service into a Service + Send trait object. Read more
Source§

fn boxed_clone(self) -> BoxCloneService<Request, Self::Response, Self::Error>
where Self: Sized + Clone + Send + 'static, Self::Future: Send + 'static,

Convert the service into a Service + Clone + Send trait object. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more