clementine_core/task/
tx_sender.rs

1use 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
45// Implement IntoTask for TxSender
46impl<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}