Skip to main content

WebhookContext

Struct WebhookContext 

Source
#[non_exhaustive]
pub struct WebhookContext { pub webhook_name: String, pub request_id: String, pub idempotency_key: Option<String>, /* private fields */ }
Expand description

Context available to webhook handlers.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§webhook_name: String§request_id: String§idempotency_key: Option<String>

Implementations§

Source§

impl WebhookContext

Source

pub fn new( webhook_name: String, request_id: String, headers: HashMap<String, String>, db_pool: PgPool, http_client: CircuitBreakerClient, ) -> Self

Create a new webhook context.

Source

pub fn with_transaction( webhook_name: String, request_id: String, headers: HashMap<String, String>, db_pool: PgPool, tx: Transaction<'static, Postgres>, http_client: CircuitBreakerClient, ) -> (Self, Arc<Mutex<Option<Transaction<'static, Postgres>>>>)

Build a webhook context that dispatches jobs and workflows on tx.

The runtime opens the transaction, owns the handle, and commits or rolls back based on the handler’s result. Anything the handler dispatches lands on the same connection, so failed webhooks don’t leave orphaned jobs behind.

Source

pub fn is_transactional(&self) -> bool

Whether dispatches will participate in an enclosing transaction.

Source

pub fn with_kv(self, kv: Arc<dyn KvHandle>) -> Self

Attach a KV store handle. Called by the runtime before handing the context to the handler.

Source

pub fn kv(&self) -> Result<&dyn KvHandle>

Access the KV store.

Source

pub fn with_idempotency_key(self, key: Option<String>) -> Self

Set idempotency key.

Source

pub fn with_job_dispatch(self, dispatcher: Arc<dyn JobDispatch>) -> Self

Set job dispatcher.

Source

pub fn with_workflow_dispatch( self, dispatcher: Arc<dyn WorkflowDispatch>, ) -> Self

Set workflow dispatcher.

Source

pub fn with_env_provider(self, provider: Arc<dyn EnvProvider>) -> Self

Set environment provider.

Source

pub fn db(&self) -> ForgeDb

Get database pool.

Source

pub fn db_conn(&self) -> DbConn<'_>

Get a DbConn for use in shared helper functions.

In transactional mode, returns a transaction-backed handle. Outside a transaction, returns a pool-backed handle.

Source

pub async fn conn(&self) -> Result<ForgeConn<'_>>

Acquire a connection compatible with sqlx compile-time checked macros.

In transactional mode, returns a guard over the active transaction so the handler’s queries participate in the same transaction as its dispatches. Outside a transaction, acquires a fresh pool connection.

Source

pub fn http(&self) -> HttpClient

Get the HTTP client for external requests.

Source

pub fn raw_http(&self) -> &Client

Get the raw reqwest client, bypassing circuit breaker execution.

Source

pub fn set_http_timeout(&mut self, timeout: Option<Duration>)

Source

pub fn header(&self, name: &str) -> Option<&str>

Get a request header value.

Header names are case-insensitive.

Source

pub fn headers(&self) -> &HashMap<String, String>

Get all headers.

Source

pub async fn dispatch_job<T: Serialize>( &self, job_type: &str, args: T, ) -> Result<Uuid>

Dispatch a background job for async processing.

This is the recommended way to handle webhook events:

  1. Validate the webhook signature
  2. Dispatch a job to process the event
  3. Return 202 Accepted immediately
§Arguments
  • job_type - The registered name of the job type
  • args - The arguments for the job (will be serialized to JSON)
§Returns

The UUID of the dispatched job, or an error if dispatch is not available.

Source

pub async fn dispatch<J: ForgeJob>(&self, args: J::Args) -> Result<Uuid>

Type-safe dispatch: resolves the job name from the type’s ForgeJob impl and serializes the args at the call site.

Source

pub async fn start_workflow<T: Serialize>( &self, workflow_name: &str, input: T, ) -> Result<Uuid>

Start a workflow.

Source

pub async fn start<W: ForgeWorkflow>(&self, input: W::Input) -> Result<Uuid>

Type-safe workflow start.

Source

pub async fn cancel_job( &self, job_id: Uuid, reason: Option<String>, ) -> Result<bool>

Request cancellation for a job.

Trait Implementations§

Source§

impl EnvAccess for WebhookContext

Source§

fn env_provider(&self) -> &dyn EnvProvider

Source§

fn env(&self, key: &str) -> Option<String>

Source§

fn env_or(&self, key: &str, default: &str) -> String

Source§

fn env_require(&self, key: &str) -> Result<String>

Source§

fn env_parse<T: FromStr>(&self, key: &str) -> Result<T>
where T::Err: Display,

Source§

fn env_parse_or<T: FromStr>(&self, key: &str, default: T) -> Result<T>
where T::Err: Display,

Returns the default when unset; errors only if the variable is set but unparseable.
Source§

fn env_contains(&self, key: &str) -> bool

Source§

impl HandlerContext for WebhookContext

Source§

fn db(&self) -> ForgeDb

Database handle with automatic db.query tracing spans. Read more
Source§

fn db_conn(&self) -> DbConn<'_>

Unified connection handle for shared helper functions. Read more

Auto Trait Implementations§

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<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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<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