breez_sdk_liquid/plugin/
mod.rs

1use std::sync::Arc;
2use std::sync::Weak;
3
4use crate::error::*;
5use crate::model::*;
6use crate::sdk::LiquidSdk;
7
8mod storage;
9
10use anyhow::Context as _;
11pub use storage::*;
12
13#[sdk_macros::async_trait]
14pub trait Plugin: Send + Sync {
15    fn id(&self) -> String;
16    async fn on_start(&self, plugin_sdk: PluginSdk, storage: PluginStorage);
17    async fn on_stop(&self);
18}
19
20#[derive(Clone)]
21pub struct PluginSdk {
22    sdk: Weak<LiquidSdk>,
23}
24
25impl PluginSdk {
26    pub(crate) fn new(sdk: Weak<LiquidSdk>) -> Self {
27        Self { sdk }
28    }
29
30    fn sdk(&self) -> anyhow::Result<Arc<LiquidSdk>> {
31        self.sdk
32            .upgrade()
33            .context("Could not reach running SDK instance.")
34    }
35
36    pub async fn get_info(&self) -> Result<GetInfoResponse, SdkError> {
37        self.sdk()?.get_info().await
38    }
39
40    pub async fn prepare_send_payment(
41        &self,
42        req: &PrepareSendRequest,
43    ) -> Result<PrepareSendResponse, PaymentError> {
44        self.sdk()?.prepare_send_payment(req).await
45    }
46
47    pub async fn send_payment(
48        &self,
49        req: &SendPaymentRequest,
50    ) -> Result<SendPaymentResponse, PaymentError> {
51        self.sdk()?.send_payment(req).await
52    }
53
54    pub async fn prepare_receive_payment(
55        &self,
56        req: &PrepareReceiveRequest,
57    ) -> Result<PrepareReceiveResponse, PaymentError> {
58        self.sdk()?.prepare_receive_payment(req).await
59    }
60
61    pub async fn receive_payment(
62        &self,
63        req: &ReceivePaymentRequest,
64    ) -> Result<ReceivePaymentResponse, PaymentError> {
65        self.sdk()?.receive_payment(req).await
66    }
67
68    pub async fn list_payments(
69        &self,
70        req: &ListPaymentsRequest,
71    ) -> Result<Vec<Payment>, PaymentError> {
72        self.sdk()?.list_payments(req).await
73    }
74
75    pub async fn add_event_listener(&self, listener: Box<dyn EventListener>) -> SdkResult<String> {
76        self.sdk()?.add_event_listener(listener).await
77    }
78
79    pub async fn remove_event_listener(&self, id: String) -> SdkResult<()> {
80        self.sdk()?.remove_event_listener(id).await
81    }
82}