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