#[non_exhaustive]pub enum StreamChunk {
Start {
interaction: InteractionResponse,
},
StatusUpdate {
interaction_id: String,
status: InteractionStatus,
},
ContentStart {
index: usize,
content_type: Option<String>,
},
Delta(Content),
ContentStop {
index: usize,
},
Complete(InteractionResponse),
Error {
message: String,
code: Option<String>,
},
Unknown {
chunk_type: String,
data: Value,
},
}Expand description
A chunk from the streaming API
During streaming, the API sends different types of events:
Start: Initial interaction event (first event, contains ID)StatusUpdate: Status changes during processingContentStart: Content generation begins for an outputDelta: Incremental content updates (text, thought, function_call, etc.)ContentStop: Content generation ends for an outputComplete: The final complete interaction responseError: Error occurred during streaming
All variants implement Serialize and Deserialize for logging,
persistence, and replay of streaming events.
§Forward Compatibility
This enum uses #[non_exhaustive] to allow adding new chunk types in future
versions without breaking existing code. Always include a wildcard arm in
match statements. Unknown chunk types deserialize to the Unknown variant
with their data preserved.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Start
Interaction started (first event, contains ID).
Sent when the interaction is accepted by the API. Provides early access to the interaction ID before any content is generated.
Fields
interaction: InteractionResponseThe full interaction response at start time
StatusUpdate
Status update for in-progress interaction.
Sent when the interaction status changes during processing. Useful for tracking progress of background/agent interactions.
ContentStart
Content generation started for an output.
Sent when a new content block begins generation.
The index indicates which output position this content will occupy.
Fields
Delta(Content)
Incremental content update
ContentStop
Content generation stopped for an output.
Sent when a content block finishes generation.
Complete(InteractionResponse)
Complete interaction response (final event)
Error
Error occurred during streaming.
Indicates a terminal error condition. The stream will end after this event.
Fields
Unknown
Unknown chunk type (for forward compatibility).
This variant is used when deserializing JSON that contains an unrecognized
chunk_type. This allows the library to gracefully handle new chunk types
added by the API in future versions without failing deserialization.
The chunk_type field contains the unrecognized type string, and data
contains the full JSON data for inspection or debugging.
Implementations§
Source§impl StreamChunk
impl StreamChunk
Sourcepub const fn is_unknown(&self) -> bool
pub const fn is_unknown(&self) -> bool
Check if this is an unknown chunk type.
Sourcepub fn unknown_chunk_type(&self) -> Option<&str>
pub fn unknown_chunk_type(&self) -> Option<&str>
Returns the chunk type name if this is an unknown chunk type.
Returns None for known chunk types.
Sourcepub fn unknown_data(&self) -> Option<&Value>
pub fn unknown_data(&self) -> Option<&Value>
Returns the raw JSON data if this is an unknown chunk type.
Returns None for known chunk types.
Sourcepub fn interaction_id(&self) -> Option<&str>
pub fn interaction_id(&self) -> Option<&str>
Returns the interaction ID if this event contains one.
Available for Start, StatusUpdate, and Complete variants.
§Example
if let Some(id) = chunk.interaction_id() {
println!("Interaction ID: {}", id);
}Sourcepub const fn is_terminal(&self) -> bool
pub const fn is_terminal(&self) -> bool
Returns true if this is a terminal event.
Terminal events indicate the stream has ended (either successfully or with an error). After receiving a terminal event, no more events will be sent.
Terminal events are:
Complete: Successful completionError: Error occurred
§Example
if chunk.is_terminal() {
println!("Stream has ended");
}Sourcepub fn status(&self) -> Option<&InteractionStatus>
pub fn status(&self) -> Option<&InteractionStatus>
Returns the status if this event contains one.
Available for StatusUpdate and Complete variants.
§Example
if let Some(status) = chunk.status() {
println!("Status: {:?}", status);
}Trait Implementations§
Source§impl Clone for StreamChunk
impl Clone for StreamChunk
Source§fn clone(&self) -> StreamChunk
fn clone(&self) -> StreamChunk
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for StreamChunk
impl Debug for StreamChunk
Source§impl<'de> Deserialize<'de> for StreamChunk
impl<'de> Deserialize<'de> for StreamChunk
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for StreamChunk
impl RefUnwindSafe for StreamChunk
impl Send for StreamChunk
impl Sync for StreamChunk
impl Unpin for StreamChunk
impl UnwindSafe for StreamChunk
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);