use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Usage {
#[serde(alias = "input_tokens")]
pub prompt_tokens: u32,
#[serde(alias = "output_tokens")]
pub completion_tokens: u32,
pub total_tokens: u32,
#[serde(
skip_serializing_if = "Option::is_none",
alias = "output_tokens_details"
)]
pub completion_tokens_details: Option<CompletionTokensDetails>,
#[serde(
skip_serializing_if = "Option::is_none",
alias = "input_tokens_details"
)]
pub prompt_tokens_details: Option<PromptTokensDetails>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CompletionTokensDetails {
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_tokens: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_tokens: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PromptTokensDetails {
#[serde(skip_serializing_if = "Option::is_none")]
pub cached_tokens: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_tokens: Option<u32>,
}