Skip to main content

Channel

Struct Channel 

Source
pub struct Channel<T> { /* private fields */ }
Expand description

Defines one durable FIFO queue of typed messages.

Add the Channel to crate::PersistenceSchema. Clients and handlers may publish messages; Steps create Condition values that wait for queue-size bounds and read the messages consumed by the satisfied condition.

Handler publications and deletions are staged until successful return. A satisfied wait consumes messages before Execute; it does not combine that consumption with later publications into one transaction. Pending-message reads are snapshots that other handlers can change. Select pending-message loads explicitly. Use transactional RPC execution for atomic deletion and publication, and a shared Attribute lock when all cooperating writers must serialize a decision about the queue. T must implement Value when publishing or reading messages. Declare reusable definitions as module-level std::sync::LazyLock statics.

§Examples

use dex_sdk::{Channel, Wait};

let approvals = Channel::<String>::new("approvals");
let wait = Wait::until(approvals.for_one());

Implementations§

Source§

impl<T> Channel<T>

Source

pub fn new(name: impl Into<String>) -> Self

Defines a Channel with a stable name.

Slash is prohibited because it is a reserved character.

Source

pub fn publish(&self, context: &mut Context, value: T) -> HandlerResult<()>
where T: Value,

Stages one message from the current Step or RPC invocation.

§Errors

Returns a crate::HandlerError when value cannot be encoded.

Source

pub fn delete( &self, context: &mut Context, message_id: &str, ) -> HandlerResult<()>

Stages best-effort deletion of one pending message from a handler.

Source

pub fn size(&self, context: &Context) -> HandlerResult<usize>

Returns the invocation snapshot’s queued-message count.

Source

pub fn pending_messages( &self, context: &Context, ) -> HandlerResult<Vec<ChannelMessage<T>>>
where T: Value,

Returns loaded pending messages from the invocation snapshot in FIFO order.

§Errors

Returns a crate::HandlerError when this Channel was not selected by the handler options or when decoding fails.

Source

pub fn find_pending_message( &self, context: &Context, message_id: &str, ) -> HandlerResult<Option<ChannelMessage<T>>>
where T: Value,

Finds one pending message by its Dex-assigned ID.

Returns Ok(None) when the loaded snapshot does not contain message_id.

§Errors

Returns the same errors as Self::pending_messages.

Source

pub fn condition_results(&self, context: &Context) -> HandlerResult<Vec<T>>
where T: Value,

Decodes messages consumed by this Channel’s satisfied condition.

§Errors

Returns a crate::HandlerError when a message cannot be decoded.

Source

pub fn for_one(&self) -> Condition

Creates a condition that consumes exactly one queued message.

Source

pub fn for_n(&self, count: usize) -> Condition

Creates a condition that consumes exactly count queued messages.

Source

pub fn at_least(&self, count: usize) -> Condition

Creates a condition satisfied when at least count messages are queued.

Source

pub fn at_most(&self, count: usize) -> Condition

Creates a non-blocking condition consuming up to count queued messages.

When its surrounding Wait completes, it consumes messages queued then. An empty queue yields no messages.

Source

pub fn range( &self, at_least: Option<usize>, at_most: Option<usize>, ) -> Condition

Creates a condition that waits for the lower bound, then consumes up to the upper bound.

Omitting the lower bound makes the condition complete immediately. Consumption uses only messages queued when the condition completes.

Source

pub fn when_empty(&self) -> ChannelGuard

Creates a guard used by conditional Flow completion to require an empty queue.

Trait Implementations§

Source§

impl<T> Clone for Channel<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<T> Forget for Channel<T>

§

impl<T> Freeze for Channel<T>
where PhantomData<fn() -> T>: Freeze,

§

impl<T> RefUnwindSafe for Channel<T>
where PhantomData<fn() -> T>: RefUnwindSafe,

§

impl<T> Send for Channel<T>
where PhantomData<fn() -> T>: Send,

§

impl<T> Sync for Channel<T>
where PhantomData<fn() -> T>: Sync,

§

impl<T> Unpin for Channel<T>
where PhantomData<fn() -> T>: Unpin,

§

impl<T> UnsafeUnpin for Channel<T>
where PhantomData<fn() -> T>: UnsafeUnpin,

§

impl<T> UnwindSafe for Channel<T>
where PhantomData<fn() -> T>: UnwindSafe,

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> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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