openai_dive 1.2.2

OpenAI Dive is an unofficial async Rust library that allows you to interact with the OpenAI API.
Documentation
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

use super::{request::ImageDetailLevel, response::Role, shared::Annotation};

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Message {
    pub id: String,
    pub role: Role,
    pub content: MessageContent,
    pub status: InputItemStatus,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct FileSearchToolCall {
    pub id: String,
    pub queries: Vec<String>,
    pub name: Option<String>,
    pub results: Option<Vec<FileSearchResult>>,
    pub status: FileSearchStatus,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct FileSearchResult {
    pub file_id: String,
    pub filename: String,
    pub score: Option<f32>,
    pub text: String,
    pub attributes: HashMap<String, String>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct WebSearchToolCall {
    pub id: String,
    pub status: InputItemStatus,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct FunctionToolCall {
    pub id: String,
    pub call_id: String,
    pub name: String,
    pub arguments: String,
    pub status: InputItemStatus,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct FunctionToolCallOutput {
    pub id: Option<String>,
    pub call_id: String,
    pub output: String,
    pub status: InputItemStatus,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Reasoning {
    pub id: String,
    pub summary: Vec<ReasoningSummary>,
    pub status: InputItemStatus,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum ReasoningSummary {
    #[serde(rename = "summary_text")]
    Text { text: String },
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum InputItemStatus {
    InProgress,
    Completed,
    Incomplete,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FileSearchStatus {
    InProgress,
    Searching,
    Completed,
    Incomplete,
    Failed,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(tag = "type")]
pub enum MessageContent {
    #[serde(rename = "input_text")]
    InputText {
        text: String,
    },
    #[serde(rename = "input_image")]
    Image {
        file_id: Option<String>,
        image_url: Option<String>,
        detail: ImageDetailLevel,
    },
    #[serde(rename = "input_file")]
    File {
        file_id: Option<String>,
        filename: Option<String>,
        file_data: Option<String>,
    },
    #[serde(rename = "output_text")]
    OutputText {
        text: String,
        annotations: Vec<Annotation>,
    },
    Refusal {
        refusal: String,
    },
}