1use async_trait::async_trait;
2use serde::{Serialize, de::DeserializeOwned};
3
4use crate::backoff::BackoffStrategy;
5use crate::context::TaskContext;
6use crate::error::TaskResult;
7
8#[async_trait]
10pub trait Task: Send + Sync + Serialize + DeserializeOwned + 'static {
11 const NAME: &'static str;
13
14 const QUEUE: &'static str = "default";
16
17 const MAX_RETRIES: u32 = 3;
19
20 fn backoff() -> BackoffStrategy {
22 BackoffStrategy::default()
23 }
24
25 type Output: Serialize + DeserializeOwned + Send;
27
28 async fn run(&self, ctx: &TaskContext) -> TaskResult<Self::Output>;
30}