Skip to main content

flashmind_types/
credits.rs

1//! Provider credit balances, separate from session token usage.
2
3use rust_decimal::Decimal;
4use serde::{Deserialize, Serialize};
5
6/// What the reported credit limit applies to.
7#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum CreditScope {
10    Account,
11    ApiKey,
12    Budget,
13}
14
15/// Unit used by a provider's credit balance.
16#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
17#[serde(rename_all = "snake_case")]
18pub enum CreditUnit {
19    Credits,
20    Usd,
21}
22
23/// A provider balance snapshot. Missing amounts are unknown, never zero.
24#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
25pub struct CreditBalance {
26    pub scope: CreditScope,
27    pub unit: CreditUnit,
28    #[serde(with = "rust_decimal::serde::str_option")]
29    pub remaining: Option<Decimal>,
30    #[serde(with = "rust_decimal::serde::str_option")]
31    pub total: Option<Decimal>,
32    #[serde(with = "rust_decimal::serde::str_option")]
33    pub used: Option<Decimal>,
34    pub resets: Option<String>,
35}