use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::error::OpenAIError;
#[derive(Debug, Clone, Serialize, Default, Builder)]
#[builder(name = "UsageQueryParamsArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct UsageQueryParams {
pub start_time: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_time: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bucket_width: Option<UsageBucketWidth>,
#[serde(skip_serializing_if = "Option::is_none")]
pub project_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub api_key_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub models: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub batch: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub group_by: Option<Vec<UsageGroupBy>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum UsageBucketWidth {
#[serde(rename = "1m")]
OneMinute,
#[serde(rename = "1h")]
OneHour,
#[serde(rename = "1d")]
OneDay,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UsageGroupBy {
ProjectId,
UserId,
ApiKeyId,
Model,
Batch,
ServiceTier,
}