use serde::Deserialize;
use crate::client::Client;
use crate::decimal::Decimal;
use crate::error::Result;
use crate::http::{send, RequestOpts};
use crate::timestamp::Timestamp;
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
#[non_exhaustive]
pub enum AccessStatus {
Active,
Trialing,
Grace,
Suspended,
None,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Deserialize)]
pub struct BillingUsage {
pub extra_stream_minutes_total: i64,
pub export_gb_total: Decimal,
pub export_gb_extra: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct BillingSummary {
pub access_status: AccessStatus,
#[serde(default)]
pub grace_until: Option<Timestamp>,
#[serde(default)]
pub plan_code: Option<String>,
#[serde(default)]
pub current_period_end: Option<Timestamp>,
pub usage: BillingUsage,
}
pub struct BillingResource<'a> {
pub(crate) client: &'a Client,
}
impl<'a> BillingResource<'a> {
pub async fn summary(&self) -> Result<BillingSummary> {
send::<_, ()>(
self.client,
reqwest::Method::GET,
"/billing/summary",
None,
None,
RequestOpts::default(),
)
.await
}
}