vapi_client/models/
open_ai_message.rs

1use crate::models;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
6pub struct OpenAiMessage {
7    /// Missing → None, present → Some(...)
8    #[serde(default)]
9    pub content: Option<String>,
10
11    pub role: Role,
12
13    /// Capture whatever payload comes back as "tool_calls"  
14    /// (you can also replace `Value` with `Vec<models::ToolCall>` if you have a struct)
15    #[serde(rename = "tool_calls", default)]
16    pub tool_calls: Option<Value>,
17}
18
19impl OpenAiMessage {
20    pub fn new(content: Option<String>, role: Role) -> Self {
21        Self { content, role, tool_calls: None }
22    }
23}
24
25#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
26pub enum Role {
27    #[serde(rename = "assistant")]
28    Assistant,
29    #[serde(rename = "function")]
30    Function,
31    #[serde(rename = "user")]
32    User,
33    #[serde(rename = "system")]
34    System,
35    #[serde(rename = "tool")]
36    Tool,
37}
38
39impl Default for Role {
40    fn default() -> Role {
41        Role::Assistant
42    }
43}