Skip to main content

ProviderStreamControl

Struct ProviderStreamControl 

Source
#[repr(C)]
pub struct ProviderStreamControl { pub is_cancelled: extern "C" fn(user_data: *mut c_void, chunk_kind: u32) -> i32, pub wait_cancelled_ms: extern "C" fn(user_data: *mut c_void, timeout_ms: u32) -> i32, pub user_data: *mut c_void, }
Expand description

The plugin’s synchronous control surface over the host, passed to a v2 streaming request fn.

The fields are plain fn pointers plus an opaque pointer, so the struct is Copy and needs no deallocation. The host owns it for the duration of the request and it must not be retained.

is_cancelled is the cheap check a plugin’s request loop makes between chunks (poll it, do not block on it). wait_cancelled_ms is the blocking variant for a plugin whose loop is not able to poll — an SSE frame read, a sleep between retries — and it must return promptly on cancellation rather than waiting out the full timeout.

ⓘ
// Inside a v2 request fn, before handing a delta to `emit`:
if control.is_cancelled(control.user_data, ProviderChunkKind::Content as u32) != 0 {
    return 1; // stop producing; the host is already gone
}

Fields§

§is_cancelled: extern "C" fn(user_data: *mut c_void, chunk_kind: u32) -> i32

is_cancelled(control_user_data, chunk_kind: u32) -> i32. Nonzero when the caller has gone away. chunk_kind lets the host still admit the structural chunks a partial message needs: pass ProviderChunkKind::Content (0) for model output and ProviderChunkKind::Structural (1) otherwise. Never blocking, never frees anything.

§wait_cancelled_ms: extern "C" fn(user_data: *mut c_void, timeout_ms: u32) -> i32

wait_cancelled_ms(control_user_data, timeout_ms) -> i32. Blocks up to timeout_ms waiting for cancellation, returning nonzero the moment it is observed. timeout_ms == 0 is a non-blocking poll (same as is_cancelled with ProviderChunkKind::Content). Safe to call from the request thread: it only touches the host’s cancellation latch, which is always present in the snapshot and never holds another lock.

§user_data: *mut c_void

Host-owned opaque handle, passed back unchanged to both fields above.

Trait Implementations§

Source§

impl Clone for ProviderStreamControl

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

impl Copy for ProviderStreamControl

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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