use async_trait::async_trait;
use serde::{de::DeserializeOwned, Serialize};
use crate::BackgroundJobServerPublisher;
pub trait JobParameter
where
Self: Sized + Serialize + DeserializeOwned,
{
fn to_bytes(&self) -> anyhow::Result<Vec<u8>>;
fn from_bytes(payload: &[u8]) -> Self;
fn get_ptype(&self) -> String;
}
#[async_trait]
pub trait BgJobHandler<C> {
fn get_ctx(&self) -> &C;
fn get_publisher(&self) -> &BackgroundJobServerPublisher;
async fn dispatch(&self, ptype: String, payload: &[u8]) -> anyhow::Result<()>;
}