deepl_rustls/endpoint/
usage.rs

1use super::Result;
2use crate::{DeepLApi, Error};
3use serde::Deserialize;
4
5/// Response from the usage API
6#[derive(Deserialize)]
7pub struct UsageResponse {
8    pub character_count: u64,
9    pub character_limit: u64,
10}
11
12impl DeepLApi {
13    /// Get the current DeepL API usage
14    ///
15    /// # Example
16    ///
17    /// ```rust
18    /// use deepl::DeepLApi;
19    ///
20    /// let key = std::env::var("DEEPL_API_KEY").unwrap();
21    /// let deepl = DeepLApi::with(&key).new();
22    /// let response = deepl.get_usage().await.unwrap();
23    ///
24    /// assert_ne!(response.character_count, 0);
25    /// ```
26    pub async fn get_usage(&self) -> Result<UsageResponse> {
27        let response = self
28            .post(self.get_endpoint("usage"))
29            .send()
30            .await
31            .map_err(|err| Error::RequestFail(err.to_string()))?;
32
33        if !response.status().is_success() {
34            return super::extract_deepl_error(response).await;
35        }
36
37        let response: UsageResponse = response.json().await.map_err(|err| {
38            Error::InvalidResponse(format!("convert json bytes to Rust type: {err}"))
39        })?;
40
41        Ok(response)
42    }
43}
44
45#[tokio::test]
46async fn test_usage() {
47    let key = std::env::var("DEEPL_API_KEY").unwrap();
48    let api = DeepLApi::with(&key).new();
49    let response = api.get_usage().await.unwrap();
50
51    assert_ne!(response.character_count, 0);
52}