breez_sdk_liquid/plugin/
mod.rs1use 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}