runledger_core/jobs/
handler.rs1use std::sync::Arc;
2
3use async_trait::async_trait;
4use serde_json::Value;
5
6use super::identifiers::JobType;
7use super::{JobCompletion, JobContext, JobDeadLetterInfo, JobFailure};
8
9#[async_trait]
10pub trait JobHandler: Send + Sync {
11 fn job_type(&self) -> JobType<'static>;
12 async fn execute(
13 &self,
14 context: JobContext,
15 payload: Value,
16 ) -> Result<JobCompletion, JobFailure>;
17
18 async fn on_dead_letter(
19 &self,
20 _context: JobContext,
21 _payload: Value,
22 _dead_letter: JobDeadLetterInfo,
23 ) {
24 }
25}
26
27pub trait JobHandlerRegistry {
28 fn register_boxed(&mut self, handler: Arc<dyn JobHandler>);
29
30 fn register<H>(&mut self, handler: H)
31 where
32 Self: Sized,
33 H: JobHandler + 'static,
34 {
35 self.register_boxed(Arc::new(handler));
36 }
37}