use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct CreditsResponse {
#[serde(default)]
pub data: CreditsData,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct CreditsData {
#[serde(default)]
pub total_credits: f64,
#[serde(default)]
pub total_usage: f64,
}
impl CreditsData {
pub fn remaining(&self) -> f64 {
self.total_credits - self.total_usage
}
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct KeyResponse {
#[serde(default)]
pub data: KeyData,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct KeyData {
#[serde(default)]
pub label: String,
#[serde(default)]
pub limit: Option<f64>,
#[serde(default)]
pub usage: f64,
#[serde(default)]
pub is_free_tier: bool,
#[serde(default)]
pub limit_remaining: Option<f64>,
#[serde(default)]
pub is_provisioning_key: bool,
#[serde(default)]
pub rate_limit: Option<KeyRateLimit>,
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct ActivityOptions {
pub date: Option<String>,
}
impl ActivityOptions {
pub fn new() -> Self {
Self::default()
}
pub fn date(mut self, date: impl Into<String>) -> Self {
self.date = Some(date.into());
self
}
pub(crate) fn to_query(&self) -> Vec<(&'static str, String)> {
let mut q = Vec::new();
if let Some(d) = &self.date {
q.push(("date", d.clone()));
}
q
}
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ActivityResponse {
#[serde(default)]
pub data: Vec<ActivityData>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ActivityData {
#[serde(default)]
pub date: String,
#[serde(default)]
pub model: String,
#[serde(default)]
pub model_permaslug: String,
#[serde(default)]
pub endpoint_id: String,
#[serde(default)]
pub provider_name: String,
#[serde(default)]
pub usage: f64,
#[serde(default)]
pub byok_usage_inference: f64,
#[serde(default)]
pub requests: f64,
#[serde(default)]
pub prompt_tokens: f64,
#[serde(default)]
pub completion_tokens: f64,
#[serde(default)]
pub reasoning_tokens: f64,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct ListKeysOptions {
pub offset: Option<u32>,
pub include_disabled: Option<bool>,
}
impl ListKeysOptions {
pub fn new() -> Self {
Self::default()
}
pub fn offset(mut self, offset: u32) -> Self {
self.offset = Some(offset);
self
}
pub fn include_disabled(mut self, include: bool) -> Self {
self.include_disabled = Some(include);
self
}
pub(crate) fn to_query(self) -> Vec<(&'static str, String)> {
let mut q = Vec::new();
if let Some(o) = self.offset {
q.push(("offset", o.to_string()));
}
if let Some(i) = self.include_disabled {
q.push(("include_disabled", i.to_string()));
}
q
}
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ListKeysResponse {
#[serde(default)]
pub data: Vec<ApiKey>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ApiKey {
#[serde(default)]
pub name: String,
#[serde(default)]
pub label: String,
#[serde(default)]
pub limit: f64,
#[serde(default)]
pub disabled: bool,
#[serde(default)]
pub created_at: String,
#[serde(default)]
pub updated_at: String,
#[serde(default)]
pub hash: String,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct CreateKeyRequest {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub limit: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub include_byok_in_limit: Option<bool>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct CreateKeyResponse {
#[serde(default)]
pub data: ApiKey,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct GetKeyByHashResponse {
#[serde(default)]
pub data: ApiKey,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct UpdateKeyRequest {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub disabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub limit: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub include_byok_in_limit: Option<bool>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct UpdateKeyResponse {
#[serde(default)]
pub data: ApiKey,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct DeleteKeyResponse {
#[serde(default)]
pub data: DeleteKeyData,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct DeleteKeyData {
#[serde(default)]
pub success: bool,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct KeyRateLimit {
#[serde(default)]
pub interval: String,
#[serde(default)]
pub requests: f64,
}