use serde::{Deserialize, Serialize};
use crate::json::JsonObject;
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
pub struct Usage {
#[serde(rename = "inputTokens")]
pub input_tokens: InputTokenUsage,
#[serde(rename = "outputTokens")]
pub output_tokens: OutputTokenUsage,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub raw: Option<JsonObject>,
}
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq)]
pub struct InputTokenUsage {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub total: Option<u64>,
#[serde(default, rename = "noCache", skip_serializing_if = "Option::is_none")]
pub no_cache: Option<u64>,
#[serde(default, rename = "cacheRead", skip_serializing_if = "Option::is_none")]
pub cache_read: Option<u64>,
#[serde(
default,
rename = "cacheWrite",
skip_serializing_if = "Option::is_none"
)]
pub cache_write: Option<u64>,
}
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq)]
pub struct OutputTokenUsage {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub total: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub text: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reasoning: Option<u64>,
}