zerobounce/
credits.rs

1use serde::Deserialize;
2use std::fmt::Debug;
3
4#[derive(Deserialize, Debug)]
5pub struct ResponseSuccess {
6    // the return value is actually a number inside double quotes, so a string...
7    #[serde(rename = "Credits")]
8    credits: String,
9}
10
11impl ResponseSuccess {
12    pub fn get_credits(&self) -> u32 {
13        self.credits.parse::<u32>().unwrap_or(0)
14    }
15}
16
17#[cfg(test)]
18mod tests {
19    use crate::{Api, ResponseType};
20    use std::env;
21
22    #[tokio::test]
23    async fn get_credits() {
24        let api_key: String =
25            env::var("ZEROBOUNCE_API_KEY").expect("$ZEROBOUNCE_API_KEY is not set");
26        let api: Api = Api::new(api_key);
27
28        let result = api.get_credits().await;
29
30        let mut credits_count: i32 = -1;
31        let mut error_message: String = String::from("");
32        if let Ok(ResponseType::Success(success)) = result {
33            credits_count = success.get_credits() as i32;
34        } else if let Ok(ResponseType::Error(error)) = result {
35            error_message = error.error;
36        }
37
38        assert!(error_message.is_empty(), "{}", error_message);
39        assert!(credits_count >= 0);
40    }
41}