Skip to main content

RequestContext

Struct RequestContext 

Source
pub struct RequestContext { /* private fields */ }
Expand description

Context passed to request handlers.

Provides methods for sending responses back to the parent. All response methods handle serialization and frame building internally.

§Thread Safety

RequestContext is Clone and can be safely shared across async tasks. The underlying writer uses a channel-based architecture that eliminates lock contention.

§Cancellation

Each context has a CancellationToken that is triggered when the parent sends an ABORT signal. Handlers should check is_cancelled() periodically or use cancelled().await with tokio::select! for immediate response.

Implementations§

Source§

impl RequestContext

Source

pub fn new(method_id: u16, request_id: u32) -> Self

Create a new request context (for testing without writer).

Source

pub fn with_writer( method_id: u16, request_id: u32, writer: WriterHandle, ) -> Self

Create a new request context with a writer.

Source

pub fn method_id(&self) -> u16

Get the method ID.

Source

pub fn request_id(&self) -> u32

Get the request ID.

Source

pub fn is_cancelled(&self) -> bool

Check if this request has been cancelled.

Handlers should check this periodically during long operations.

§Example
for i in 0..1000 {
    if ctx.is_cancelled() {
        tracing::info!("Request cancelled at step {}", i);
        return Ok(());
    }
    do_step(i).await;
}
Source

pub fn cancelled(&self) -> WaitForCancellationFuture<'_>

Wait for cancellation.

Use with tokio::select! to handle cancellation immediately:

§Example
tokio::select! {
    _ = ctx.cancelled() => {
        // Request was cancelled, clean up
        return Ok(());
    }
    result = do_work() => {
        ctx.respond(&result).await
    }
}
Source

pub fn cancellation_token(&self) -> CancellationToken

Get the cancellation token for advanced use cases.

Useful when you need to pass the token to child tasks.

§Example
let token = ctx.cancellation_token();
let handle = tokio::spawn(async move {
    tokio::select! {
        _ = token.cancelled() => None,
        result = do_work() => Some(result),
    }
});
Source

pub async fn respond<T: Serialize>(&self, payload: &T) -> Result<()>

Send a response with the given payload.

Serializes the payload using MsgPack and sends a response frame.

Source

pub async fn respond_raw(&self, payload: &[u8]) -> Result<()>

Send a response with raw bytes (zero-copy).

Source

pub async fn respond_bytes(&self, payload: Bytes) -> Result<()>

Send a response with pre-allocated Bytes (zero-copy).

Source

pub async fn ack(&self) -> Result<()>

Send an acknowledgment (empty payload).

Source

pub async fn chunk<T: Serialize>(&self, payload: &T) -> Result<()>

Send a stream chunk.

Serializes the payload using MsgPack and sends a stream chunk frame.

Source

pub async fn chunk_raw(&self, payload: &[u8]) -> Result<()>

Send a stream chunk with raw bytes.

Source

pub async fn chunk_bytes(&self, payload: Bytes) -> Result<()>

Send a stream chunk with pre-allocated Bytes (zero-copy).

Source

pub async fn end(&self) -> Result<()>

End a stream.

Sends a stream end frame with empty payload. IMPORTANT: STREAM_END frames always have empty payload!

Source

pub async fn error(&self, message: &str) -> Result<()>

Send an error response.

Serializes the error message and sends an error frame.

Trait Implementations§

Source§

impl Clone for RequestContext

Source§

fn clone(&self) -> RequestContext

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

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> 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> 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<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