Skip to main content

lb_rs/service/
usage.rs

1use crate::Lb;
2use crate::model::api::{FileUsage, GetUsageRequest};
3use crate::model::errors::LbResult;
4use crate::model::usage::get_usage;
5use serde::{Deserialize, Serialize};
6
7#[derive(Serialize, Deserialize, Debug, Clone)]
8pub struct UsageMetrics {
9    pub usages: Vec<FileUsage>,
10    pub server_usage: UsageItemMetric,
11    pub data_cap: UsageItemMetric,
12}
13
14#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone)]
15pub struct UsageItemMetric {
16    pub exact: u64,
17    pub readable: String,
18}
19
20impl Lb {
21    /// fetches data footprint on server along with data cap information
22    /// compares this to local changes to estimate net data increase
23    ///
24    /// callers of this function should be prepared to handle:
25    /// - [crate::LbErrKind::AccountNonexistent]
26    /// - [crate::LbErrKind::ClientUpdateRequired]
27    /// - [crate::LbErrKind::ServerUnreachable]
28    #[instrument(level = "debug", skip(self))]
29    pub async fn get_usage(&self) -> LbResult<UsageMetrics> {
30        let acc = self.get_account()?;
31        let usage = self.client.request(acc, GetUsageRequest {}).await?;
32        Ok(get_usage(usage))
33    }
34}