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,
impl<F, Fut> DurableHandlerBuilder<F, Fut>where
F: Fn(Value, BuilderContext) -> Fut + Send + Sync + 'static,
Fut: Future<Output = Result<Value, DurableError>> + Send,
Sourcepub fn with_tracing(
self,
subscriber: impl Subscriber + Send + Sync + 'static,
) -> Self
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
subscriber— Any type implementingtracing::Subscriber+Send + Sync + 'static
§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
}Sourcepub fn with_error_handler(
self,
handler: impl Fn(DurableError) -> DurableError + Send + Sync + 'static,
) -> Self
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 closureFn(DurableError) -> DurableErrorthat 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
}Sourcepub async fn run(self) -> Result<(), Error>
pub async fn run(self) -> Result<(), Error>
Consume the builder and start the Lambda runtime.
This method:
- Installs the tracing subscriber (if configured via
with_tracing) - Initializes AWS configuration and creates a Lambda client
- Creates a
RealBackendfor durable execution API calls - Registers with
lambda_runtimeto receive invocations - On each invocation, extracts durable execution metadata from the event,
creates a
BuilderContext, and calls the user handler - 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>
impl<F, Fut> UnsafeUnpin for DurableHandlerBuilder<F, Fut>where
F: UnsafeUnpin,
impl<F, Fut> !UnwindSafe for DurableHandlerBuilder<F, Fut>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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