Skip to main content

DurableHandlerBuilder

Struct DurableHandlerBuilder 

Source
pub struct DurableHandlerBuilder<F, Fut>
where F: Fn(Value, BuilderContext) -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<Value, DurableError>> + Send,
{ /* private fields */ }
Expand description

A builder for constructing durable Lambda handlers.

Created via the handler function. Call .run() to start the Lambda runtime. Optionally configure tracing and error handling before calling .run() using the builder methods.

§Examples

use durable_lambda_builder::prelude::*;

#[tokio::main]
async fn main() -> Result<(), lambda_runtime::Error> {
    durable_lambda_builder::handler(|event: serde_json::Value, mut ctx: BuilderContext| async move {
        let result: Result<i32, String> = ctx.step("validate", || async { Ok(42) }).await?;
        Ok(serde_json::json!({"result": result.unwrap()}))
    })
    .run()
    .await
}

Implementations§

Source§

impl<F, Fut> DurableHandlerBuilder<F, Fut>
where F: Fn(Value, BuilderContext) -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<Value, DurableError>> + Send,

Source

pub fn with_tracing( self, subscriber: impl Subscriber + Send + Sync + 'static, ) -> Self

Configure a tracing subscriber to install before the Lambda runtime starts.

The provided subscriber is installed via tracing::subscriber::set_global_default when run() is called, before any Lambda invocations are processed.

§Arguments
§Examples
use durable_lambda_builder::prelude::*;

#[tokio::main]
async fn main() -> Result<(), lambda_runtime::Error> {
    durable_lambda_builder::handler(|event: serde_json::Value, mut ctx: BuilderContext| async move {
        Ok(serde_json::json!({"ok": true}))
    })
    .with_tracing(tracing_subscriber::fmt().finish())
    .run()
    .await
}
Source

pub fn with_error_handler( self, handler: impl Fn(DurableError) -> DurableError + Send + Sync + 'static, ) -> Self

Configure a custom error handler to transform errors before they propagate.

The provided function is called whenever the user handler returns an Err(DurableError), allowing error transformation, logging, or enrichment before the error is returned to the Lambda runtime.

§Arguments
  • handler — A closure Fn(DurableError) -> DurableError that transforms errors
§Examples
use durable_lambda_builder::prelude::*;
use durable_lambda_core::error::DurableError;

#[tokio::main]
async fn main() -> Result<(), lambda_runtime::Error> {
    durable_lambda_builder::handler(|event: serde_json::Value, mut ctx: BuilderContext| async move {
        Ok(serde_json::json!({"ok": true}))
    })
    .with_error_handler(|e: DurableError| {
        // Log or transform the error before it propagates.
        e
    })
    .run()
    .await
}
Source

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

Consume the builder and start the Lambda runtime.

This method:

  1. Installs the tracing subscriber (if configured via with_tracing)
  2. Initializes AWS configuration and creates a Lambda client
  3. Creates a RealBackend for durable execution API calls
  4. Registers with lambda_runtime to receive invocations
  5. On each invocation, extracts durable execution metadata from the event, creates a BuilderContext, and calls the user handler
  6. Routes handler errors through the error handler (if configured via with_error_handler)
§Errors

Returns lambda_runtime::Error if the Lambda runtime fails to start or encounters a fatal error.

§Panics

Panics if a tracing subscriber is configured and a global default subscriber has already been set (e.g., by another library or test framework).

§Examples
use durable_lambda_builder::prelude::*;

#[tokio::main]
async fn main() -> Result<(), lambda_runtime::Error> {
    durable_lambda_builder::handler(|event: serde_json::Value, mut ctx: BuilderContext| async move {
        Ok(serde_json::json!({"ok": true}))
    })
    .run()
    .await
}

Auto Trait Implementations§

§

impl<F, Fut> Freeze for DurableHandlerBuilder<F, Fut>
where F: Freeze,

§

impl<F, Fut> !RefUnwindSafe for DurableHandlerBuilder<F, Fut>

§

impl<F, Fut> Send for DurableHandlerBuilder<F, Fut>

§

impl<F, Fut> Sync for DurableHandlerBuilder<F, Fut>
where Fut: Sync,

§

impl<F, Fut> Unpin for DurableHandlerBuilder<F, Fut>
where F: Unpin, Fut: Unpin,

§

impl<F, Fut> UnsafeUnpin for DurableHandlerBuilder<F, Fut>
where F: UnsafeUnpin,

§

impl<F, Fut> !UnwindSafe for DurableHandlerBuilder<F, Fut>

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> 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<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