clementine_core/task/
tx_sender.rs1use crate::task::{Task, TaskVariant};
2use clementine_errors::BridgeError;
3use clementine_tx_sender::task::TxSenderTaskInternal;
4use clementine_tx_sender::{TxSender, TxSenderDatabase, TxSenderSigner, TxSenderTxBuilder};
5use tonic::async_trait;
6
7#[derive(Debug)]
8pub struct TxSenderTask<S, D, B>
9where
10 S: TxSenderSigner + 'static,
11 D: TxSenderDatabase + Clone + 'static,
12 B: TxSenderTxBuilder + 'static,
13{
14 inner: TxSenderTaskInternal<S, D, B>,
15}
16
17impl<S, D, B> TxSenderTask<S, D, B>
18where
19 S: TxSenderSigner + 'static,
20 D: TxSenderDatabase + Clone + 'static,
21 B: TxSenderTxBuilder + 'static,
22{
23 pub fn new(inner: TxSender<S, D, B>) -> Self {
24 Self {
25 inner: TxSenderTaskInternal::new(inner),
26 }
27 }
28}
29
30#[async_trait]
31impl<S, D, B> Task for TxSenderTask<S, D, B>
32where
33 S: TxSenderSigner + 'static,
34 D: TxSenderDatabase + Clone + 'static,
35 B: TxSenderTxBuilder + 'static,
36{
37 type Output = bool;
38 const VARIANT: TaskVariant = TaskVariant::TxSender;
39
40 async fn run_once(&mut self) -> Result<bool, BridgeError> {
41 self.inner.run_once().await
42 }
43}
44
45impl<S, D, B> crate::task::IntoTask for TxSender<S, D, B>
47where
48 S: TxSenderSigner + 'static,
49 D: TxSenderDatabase + Clone + 'static,
50 B: TxSenderTxBuilder + 'static,
51{
52 type Task = TxSenderTask<S, D, B>;
53 fn into_task(self) -> Self::Task {
54 TxSenderTask::new(self)
55 }
56}