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 _;
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}