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::{JobContext, JobDeadLetterInfo, JobFailure};
8
9#[async_trait]
10pub trait JobHandler: Send + Sync {
11 fn job_type(&self) -> JobType<'static>;
12 async fn execute(&self, context: JobContext, payload: Value) -> Result<(), JobFailure>;
13
14 async fn on_dead_letter(
15 &self,
16 _context: JobContext,
17 _payload: Value,
18 _dead_letter: JobDeadLetterInfo,
19 ) {
20 }
21}
22
23pub trait JobHandlerRegistry {
24 fn register_boxed(&mut self, handler: Arc<dyn JobHandler>);
25
26 fn register<H>(&mut self, handler: H)
27 where
28 Self: Sized,
29 H: JobHandler + 'static,
30 {
31 self.register_boxed(Arc::new(handler));
32 }
33}