thunkmetrc_wrapper/services/
waste_methods_service.rs1use 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 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