clementine_core/task/
tx_sender.rs1use std::time::Duration;
2
3use crate::task::{BufferedErrors, TaskExt, WithDelay};
4use crate::task::{RecoverableTask, Task, TaskVariant};
5use clementine_errors::BridgeError;
6use clementine_tx_sender::task::TxSenderTaskInternal;
7use clementine_tx_sender::TxSender;
8use tonic::async_trait;
9
10const POLL_DELAY: Duration = if cfg!(test) {
11 Duration::from_millis(400)
12} else {
13 Duration::from_secs(30)
14};
15
16#[derive(Debug)]
17pub struct TxSenderTask {
18 inner: TxSenderTaskInternal,
19}
20
21impl TxSenderTask {
22 pub fn new(inner: TxSender) -> Self {
23 Self {
24 inner: TxSenderTaskInternal::new(inner),
25 }
26 }
27}
28
29#[async_trait]
30impl Task for TxSenderTask {
31 type Output = bool;
32 const VARIANT: TaskVariant = TaskVariant::TxSender;
33
34 async fn run_once(&mut self) -> Result<bool, BridgeError> {
35 self.inner.run_once().await
36 }
37}
38
39#[async_trait]
40impl RecoverableTask for TxSenderTask {
41 async fn recover_from_error(&mut self, _error: &BridgeError) -> Result<(), BridgeError> {
42 Ok(())
44 }
45}
46
47impl crate::task::IntoTask for TxSender {
49 type Task = WithDelay<BufferedErrors<TxSenderTask>>;
50 fn into_task(self) -> Self::Task {
51 TxSenderTask::new(self)
52 .into_buffered_errors(10, 1, Duration::from_secs(10))
53 .with_delay(POLL_DELAY)
54 }
55}