Skip to main content

Content

Enum Content 

Source
pub enum Content {
Show 25 variants Text(TextContent), TextReasoning(TextReasoningContent), Data(DataContent), Uri(UriContent), Error(ErrorContent), FunctionCall(FunctionCallContent), FunctionResult(FunctionResultContent), Usage(UsageContent), HostedFile(HostedFileContent), HostedVectorStore(HostedVectorStoreContent), CodeInterpreterToolCall(CodeInterpreterToolCallContent), CodeInterpreterToolResult(CodeInterpreterToolResultContent), ImageGenerationToolCall(ImageGenerationToolCallContent), ImageGenerationToolResult(ImageGenerationToolResultContent), McpServerToolCall(McpServerToolCallContent), McpServerToolResult(McpServerToolResultContent), SearchToolCall(SearchToolCallContent), SearchToolResult(SearchToolResultContent), ShellToolCall(ShellToolCallContent), ShellToolResult(ShellToolResultContent), ShellCommandOutput(ShellCommandOutputContent), FunctionApprovalRequest(FunctionApprovalRequestContent), FunctionApprovalResponse(FunctionApprovalResponseContent), OauthConsentRequest(OauthConsentRequestContent), Unknown,
}
Expand description

The unified content union, discriminated by the type tag.

This is the Rust equivalent of the Python Contents union.

The Content::Unknown variant makes deserialization forward-compatible: a content item whose type tag is not one of the known variants deserializes to Unknown rather than failing the whole message. This mirrors Python’s parse-and-skip behavior for unknown content (_types.py:2205-2210), except the item is retained as an inert placeholder instead of being dropped. Unknown carries no data, so it re-serializes as {"type":"unknown"} (the original tag/fields are not preserved) and is treated as inert everywhere: it yields no text, no function call, and is ignored by aggregation/coalescing.

Variants§

§

Text(TextContent)

§

TextReasoning(TextReasoningContent)

§

Data(DataContent)

§

Uri(UriContent)

§

Error(ErrorContent)

§

FunctionCall(FunctionCallContent)

§

FunctionResult(FunctionResultContent)

§

Usage(UsageContent)

§

HostedFile(HostedFileContent)

§

HostedVectorStore(HostedVectorStoreContent)

§

CodeInterpreterToolCall(CodeInterpreterToolCallContent)

§

CodeInterpreterToolResult(CodeInterpreterToolResultContent)

§

ImageGenerationToolCall(ImageGenerationToolCallContent)

§

ImageGenerationToolResult(ImageGenerationToolResultContent)

§

McpServerToolCall(McpServerToolCallContent)

§

McpServerToolResult(McpServerToolResultContent)

§

SearchToolCall(SearchToolCallContent)

§

SearchToolResult(SearchToolResultContent)

§

ShellToolCall(ShellToolCallContent)

§

ShellToolResult(ShellToolResultContent)

§

ShellCommandOutput(ShellCommandOutputContent)

§

FunctionApprovalRequest(FunctionApprovalRequestContent)

§

FunctionApprovalResponse(FunctionApprovalResponseContent)

§

OauthConsentRequest(OauthConsentRequestContent)

§

Unknown

A content item whose type tag is unknown to this version of the library. Deserialization falls back to this inert variant instead of erroring; see the type-level docs.

Implementations§

Source§

impl Content

Source

pub fn text(text: impl Into<String>) -> Content

Convenience constructor for plain text.

Source

pub fn renders_on_every_provider(&self) -> bool

The text of this item, if it is text or reasoning content. Whether this content reaches the model on every chat converter this workspace ships.

This is the contract compaction’s minimum-retention logic depends on: a retained message “counts” only if it will still be there after the narrowest converter has had its say. The narrowest converter defines each row, and the evidence is pinned by contract tests in the provider crates themselves, so a converter change that invalidates a row fails a test next to the converter rather than surfacing as a compaction bug:

  • Text — mapped by every converter, but only when it carries non-whitespace: Anthropic rejects an empty text block with a 400.
  • FunctionCall, FunctionResult — mapped by every converter.
  • Data — only a valid data: URI carrying an image in a format Bedrock’s Converse API accepts (png/jpeg/gif/webp, the narrowest image set in the workspace; Anthropic requires images too), and only as user-turn content — Converse and Anthropic reject an assistant image block outright, so role-aware callers (compaction’s retention check) must not count image data in assistant messages. The URI is validated even when media_type is set: declaring a type is not the same as carrying one, and Anthropic/Gemini parse the URI before emitting anything.
  • Uri — never. Bedrock’s Converse has no remote-URL image source (inline bytes or S3 only), so a hosted image reference renders nowhere there.
  • TextReasoning — provider-dependent (Anthropic renders it, Gemini and OpenAI Chat Completions drop it), so it does not qualify.
  • Everything else (hosted tool artifacts, approvals, Unknown, …) — provider-specific at best.

The check errs conservative on purpose: callers use it to decide whether a fallback turn must be added, and nothing is ever removed on its strength, so under-claiming costs a possibly-redundant message while over-claiming produces an effectively empty request.

Source

pub fn as_text(&self) -> Option<&str>

Source

pub fn as_function_call(&self) -> Option<&FunctionCallContent>

The function call carried by this item, if any.

Source

pub fn as_function_result(&self) -> Option<&FunctionResultContent>

The function result carried by this item, if any.

Source

pub fn as_function_approval_request( &self, ) -> Option<&FunctionApprovalRequestContent>

The function-approval request carried by this item, if any.

Source

pub fn as_function_approval_response( &self, ) -> Option<&FunctionApprovalResponseContent>

The function-approval response carried by this item, if any.

Trait Implementations§

Source§

impl Clone for Content

Source§

fn clone(&self) -> Content

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 Debug for Content

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Content

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<Content, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<FunctionApprovalRequestContent> for Content

Source§

fn from(v: FunctionApprovalRequestContent) -> Content

Converts to this type from the input type.
Source§

impl From<FunctionApprovalResponseContent> for Content

Source§

fn from(v: FunctionApprovalResponseContent) -> Content

Converts to this type from the input type.
Source§

impl From<FunctionCallContent> for Content

Source§

fn from(v: FunctionCallContent) -> Content

Converts to this type from the input type.
Source§

impl From<FunctionResultContent> for Content

Source§

fn from(v: FunctionResultContent) -> Content

Converts to this type from the input type.
Source§

impl From<TextContent> for Content

Source§

fn from(v: TextContent) -> Content

Converts to this type from the input type.
Source§

impl PartialEq for Content

Source§

fn eq(&self, other: &Content) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for Content

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Content

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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