Skip to main content

thunkmetrc_wrapper/services/
webhooks_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 WebhooksService {
14    client: MetrcClient,
15    rate_limiter: Arc<MetrcRateLimiter>,
16}
17
18impl WebhooksService {
19    pub fn new(client: MetrcClient, rate_limiter: Arc<MetrcRateLimiter>) -> Self {
20        Self {
21            client,
22            rate_limiter,
23        }
24    }
25
26    /// DELETE DeleteWebhooksBySubscriptionId
27    /// 
28    /// Parameters:
29    /// - subscription_id (str): Path parameter subscriptionId
30    pub async fn delete_webhooks_by_subscription_id(&self, subscription_id: &str, body: Option<&Value>) -> std::result::Result<Option<serde_json::Value>, Box<dyn Error + Send + Sync>> {
31        let body_val = if let Some(b) = body { Some(serde_json::to_value(b)?) } else { None };
32        let subscription_id = subscription_id.to_string();
33        let client = self.client.clone();
34        
35        let body_val = body_val.clone();
36
37        let resp_val = self.rate_limiter.execute(None,false,
38            move || {
39                let client = client.clone();
40                let subscription_id = subscription_id.clone();
41                let body_val = body_val.clone();
42
43                async move {
44                    client.webhooks().delete_webhooks_by_subscription_id(&subscription_id, body_val.as_ref()
45                    ).await.map_err(|e| e as Box<dyn Error + Send + Sync>)
46                }
47            }
48        ).await?;
49
50        if let Some(v) = resp_val {
51            let typed: serde_json::Value = serde_json::from_value(v)?;
52            Ok(Some(typed))
53        } else {
54            Ok(None)
55        }
56    }
57
58    /// GET GetWebhooks
59    /// 
60    /// Parameters:
61    pub async fn get_webhooks(&self, body: Option<&Value>) -> std::result::Result<Option<serde_json::Value>, Box<dyn Error + Send + Sync>> {
62        let body_val = if let Some(b) = body { Some(serde_json::to_value(b)?) } else { None };
63        let client = self.client.clone();
64        
65        let body_val = body_val.clone();
66
67        let resp_val = self.rate_limiter.execute(None,true,
68            move || {
69                let client = client.clone();
70                let body_val = body_val.clone();
71
72                async move {
73                    client.webhooks().get_webhooks(body_val.as_ref()
74                    ).await.map_err(|e| e as Box<dyn Error + Send + Sync>)
75                }
76            }
77        ).await?;
78
79        if let Some(v) = resp_val {
80            let typed: serde_json::Value = serde_json::from_value(v)?;
81            Ok(Some(typed))
82        } else {
83            Ok(None)
84        }
85    }
86
87    /// PUT UpdateDisableBySubscriptionId
88    /// 
89    /// Parameters:
90    /// - subscription_id (str): Path parameter subscriptionId
91    /// - body (Option<&Value>): Request body
92    pub async fn update_webhooks_disable_by_subscription_id(&self, subscription_id: &str, body: Option<&Value>) -> std::result::Result<Option<serde_json::Value>, Box<dyn Error + Send + Sync>> {
93        let body_val = if let Some(b) = body { Some(serde_json::to_value(b)?) } else { None };
94        let subscription_id = subscription_id.to_string();
95        let client = self.client.clone();
96        
97        let body_val = body_val.clone();
98
99        let resp_val = self.rate_limiter.execute(None,false,
100            move || {
101                let client = client.clone();
102                let subscription_id = subscription_id.clone();
103                let body_val = body_val.clone();
104
105                async move {
106                    client.webhooks().update_webhooks_disable_by_subscription_id(&subscription_id, body_val.as_ref()
107                    ).await.map_err(|e| e as Box<dyn Error + Send + Sync>)
108                }
109            }
110        ).await?;
111
112        if let Some(v) = resp_val {
113            let typed: serde_json::Value = serde_json::from_value(v)?;
114            Ok(Some(typed))
115        } else {
116            Ok(None)
117        }
118    }
119
120    /// PUT UpdateEnableBySubscriptionId
121    /// 
122    /// Parameters:
123    /// - subscription_id (str): Path parameter subscriptionId
124    /// - body (Option<&Value>): Request body
125    pub async fn update_webhooks_enable_by_subscription_id(&self, subscription_id: &str, body: Option<&Value>) -> std::result::Result<Option<serde_json::Value>, Box<dyn Error + Send + Sync>> {
126        let body_val = if let Some(b) = body { Some(serde_json::to_value(b)?) } else { None };
127        let subscription_id = subscription_id.to_string();
128        let client = self.client.clone();
129        
130        let body_val = body_val.clone();
131
132        let resp_val = self.rate_limiter.execute(None,false,
133            move || {
134                let client = client.clone();
135                let subscription_id = subscription_id.clone();
136                let body_val = body_val.clone();
137
138                async move {
139                    client.webhooks().update_webhooks_enable_by_subscription_id(&subscription_id, body_val.as_ref()
140                    ).await.map_err(|e| e as Box<dyn Error + Send + Sync>)
141                }
142            }
143        ).await?;
144
145        if let Some(v) = resp_val {
146            let typed: serde_json::Value = serde_json::from_value(v)?;
147            Ok(Some(typed))
148        } else {
149            Ok(None)
150        }
151    }
152
153    /// PUT UpdateWebhooks
154    /// 
155    /// Parameters:
156    /// - body (Option<&Value>): Request body
157    pub async fn update_webhooks(&self, body: Option<UpdateWebhooksRequest>) -> std::result::Result<Option<WriteResponse>, Box<dyn Error + Send + Sync>> {
158        let body_val = if let Some(b) = body { Some(serde_json::to_value(b)?) } else { None };
159        let client = self.client.clone();
160        
161        let body_val = body_val.clone();
162
163        let resp_val = self.rate_limiter.execute(None,false,
164            move || {
165                let client = client.clone();
166                let body_val = body_val.clone();
167
168                async move {
169                    client.webhooks().update_webhooks(body_val.as_ref()
170                    ).await.map_err(|e| e as Box<dyn Error + Send + Sync>)
171                }
172            }
173        ).await?;
174
175        if let Some(v) = resp_val {
176            let typed: WriteResponse = serde_json::from_value(v)?;
177            Ok(Some(typed))
178        } else {
179            Ok(None)
180        }
181    }
182}
183