Skip to main content

thunkmetrc_wrapper/services/
waste_methods_service.rs

1use thunkmetrc_client::MetrcClient;
2use serde_json::Value;
3use std::error::Error;
4use std::sync::Arc;
5#[allow(unused_imports)]
6use futures::Stream;
7use crate::ratelimiter::MetrcRateLimiter;
8#[allow(unused_imports)]
9use crate::utils::iterate_pages;
10#[allow(unused_imports)]
11use crate::models::*;
12
13pub struct WasteMethodsService {
14    client: MetrcClient,
15    rate_limiter: Arc<MetrcRateLimiter>,
16}
17
18impl WasteMethodsService {
19    pub fn new(client: MetrcClient, rate_limiter: Arc<MetrcRateLimiter>) -> Self {
20        Self {
21            client,
22            rate_limiter,
23        }
24    }
25
26    /// GET GetWasteMethodsWasteMethods
27    /// Retrieves all available waste methods.
28    /// Parameters:
29    pub async fn get_waste_methods_waste_methods(&self, body: Option<&Value>) -> std::result::Result<Option<Vec<WasteMethod>>, Box<dyn Error + Send + Sync>> {
30        let body_val = if let Some(b) = body { Some(serde_json::to_value(b)?) } else { None };
31        let client = self.client.clone();
32        
33        let body_val = body_val.clone();
34
35        let resp_val = self.rate_limiter.execute(None,true,
36            move || {
37                let client = client.clone();
38                let body_val = body_val.clone();
39
40                async move {
41                    client.waste_methods().get_waste_methods_waste_methods(body_val.as_ref()
42                    ).await.map_err(|e| e as Box<dyn Error + Send + Sync>)
43                }
44            }
45        ).await?;
46
47        if let Some(v) = resp_val {
48            let typed: Vec<WasteMethod> = serde_json::from_value(v)?;
49            Ok(Some(typed))
50        } else {
51            Ok(None)
52        }
53    }
54}
55