pub struct ChatMessage {
pub role: String,
pub content: Option<String>,
pub content_blocks: Option<Vec<ContentBlock>>,
pub tool_call_id: Option<String>,
pub is_error: Option<bool>,
}Expand description
A single message in a conversation.
Fields§
§role: StringOne of “system”, “user”, “assistant”, or “tool”.
content: Option<String>Text content of the message.
content_blocks: Option<Vec<ContentBlock>>Structured content for assistant messages with tool calls.
When present, takes precedence over content.
tool_call_id: Option<String>Required when role is “tool” — references the tool_use ID.
is_error: Option<bool>Whether a tool result is an error.
Implementations§
Source§impl ChatMessage
impl ChatMessage
Sourcepub fn user(content: impl Into<String>) -> Self
pub fn user(content: impl Into<String>) -> Self
Creates a user message.
Examples found in repository?
examples/chat.rs (lines 23-25)
12async fn main() {
13 let api_key = std::env::var("QAI_API_KEY").expect("QAI_API_KEY environment variable is required");
14
15 let client = Client::new(api_key);
16
17 // --- Non-streaming example ---
18 println!("=== Non-streaming Chat ===");
19
20 let resp = client
21 .chat(&ChatRequest {
22 model: "claude-sonnet-4-6".into(),
23 messages: vec![ChatMessage::user(
24 "What is quantum computing in one sentence?",
25 )],
26 ..Default::default()
27 })
28 .await
29 .expect("Chat failed");
30
31 println!("Model: {}", resp.model);
32 println!("Response: {}", resp.text());
33 if let Some(usage) = &resp.usage {
34 println!(
35 "Tokens: {} in / {} out (cost: {} ticks)",
36 usage.input_tokens, usage.output_tokens, usage.cost_ticks
37 );
38 }
39 println!("Request ID: {}\n", resp.request_id);
40
41 // --- Streaming example ---
42 println!("=== Streaming Chat ===");
43
44 let mut stream = client
45 .chat_stream(&ChatRequest {
46 model: "claude-sonnet-4-6".into(),
47 messages: vec![ChatMessage::user(
48 "Count from 1 to 5, one number per line.",
49 )],
50 ..Default::default()
51 })
52 .await
53 .expect("ChatStream failed");
54
55 while let Some(ev) = stream.next().await {
56 match ev.event_type.as_str() {
57 "content_delta" => {
58 if let Some(delta) = &ev.delta {
59 print!("{}", delta.text);
60 }
61 }
62 "usage" => {
63 if let Some(usage) = &ev.usage {
64 println!("\n[Cost: {} ticks]", usage.cost_ticks);
65 }
66 }
67 "error" => {
68 eprintln!("Stream error: {}", ev.error.as_deref().unwrap_or("unknown"));
69 std::process::exit(1);
70 }
71 "done" => {
72 println!("\n[Stream complete]");
73 }
74 _ => {}
75 }
76 }
77}Trait Implementations§
Source§impl Clone for ChatMessage
impl Clone for ChatMessage
Source§fn clone(&self) -> ChatMessage
fn clone(&self) -> ChatMessage
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ChatMessage
impl Debug for ChatMessage
Source§impl Default for ChatMessage
impl Default for ChatMessage
Source§fn default() -> ChatMessage
fn default() -> ChatMessage
Returns the “default value” for a type. Read more
Source§impl<'de> Deserialize<'de> for ChatMessage
impl<'de> Deserialize<'de> for ChatMessage
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>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for ChatMessage
impl RefUnwindSafe for ChatMessage
impl Send for ChatMessage
impl Sync for ChatMessage
impl Unpin for ChatMessage
impl UnsafeUnpin for ChatMessage
impl UnwindSafe for ChatMessage
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
Mutably borrows from an owned value. Read more