openai_dive 1.4.3

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

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum Gpt5Model {
    #[serde(rename = "gpt-5.4")]
    Gpt54,
    #[serde(rename = "gpt-5.4-mini")]
    Gpt54Mini,
    #[serde(rename = "gpt-5.4-nano")]
    Gpt54Nano,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum Gpt4Model {
    #[serde(rename = "gpt-4.1")]
    Gpt41,
    #[serde(rename = "gpt-4o")]
    Gpt4O,
    #[serde(rename = "gpt-4o-audio-preview")]
    Gpt4OAudioPreview,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum ToolModel {
    #[serde(rename = "gpt-4o-search-preview")]
    Gpt4OSearchPreview,
    #[serde(rename = "gpt-4o-mini-search-preview")]
    Gpt4OMiniSearchPreview,
    #[serde(rename = "computer-use-preview")]
    ComputerUsePreview,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum ModerationModel {
    #[serde(rename = "omni-moderation-latest")]
    OmniModerationLatest,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum EmbeddingModel {
    #[serde(rename = "text-embedding-3-small")]
    TextEmbedding3Small,
    #[serde(rename = "text-embedding-3-large")]
    TextEmbedding3Large,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum TranscriptionModel {
    #[serde(rename = "gpt-4o-transcribe")]
    Gpt4OTranscribe,
    #[serde(rename = "whisper-1")]
    Whisper1,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum TTSModel {
    #[serde(rename = "gpt-4o-mini-tts")]
    Gpt4OMiniTts,
    #[serde(rename = "tts-1")]
    Tts1,
    #[serde(rename = "tts-1-hd")]
    Tts1HD,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum ImageModel {
    #[serde(rename = "gpt-image-1")]
    GptImage1,
    #[serde(rename = "dall-e-3")]
    DallE3,
    #[serde(rename = "dall-e-2")]
    DallE2,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum VideoModel {
    #[serde(rename = "sora-2")]
    Sora2,
    #[serde(rename = "sora-2-pro")]
    Sora2Pro,
}

macro_rules! impl_display {
    ($t:ty) => {
        impl std::fmt::Display for $t {
            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
                let json_str = serde_json::to_string(self).unwrap();
                let trimmed_str = json_str.trim_matches('"');
                write!(f, "{}", trimmed_str)
            }
        }
    };
}

impl_display!(Gpt5Model);
impl_display!(Gpt4Model);
impl_display!(ToolModel);
impl_display!(ModerationModel);
impl_display!(EmbeddingModel);
impl_display!(TranscriptionModel);
impl_display!(TTSModel);
impl_display!(ImageModel);
impl_display!(VideoModel);