use serde::{Deserialize, Serialize};
use crate::task::{Response, Task};
#[cfg(feature = "memory-queue")]
pub mod memory;
#[cfg(feature = "nats-queue")]
pub mod nats;
pub trait QueueProducer {
type Message;
fn send_task(&self, task: Task) -> impl Future<Output = anyhow::Result<Self::Message>>;
fn receive_response(
&self,
message: Self::Message,
) -> impl Future<Output = anyhow::Result<Option<Response>>>;
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WrappedTask<T> {
pub message: T,
pub task: Task,
}
pub trait QueueWorker {
type Message;
fn receive_task(
&self,
) -> impl Future<Output = anyhow::Result<Option<WrappedTask<Self::Message>>>>;
fn send_response(
&self,
message: Self::Message,
response: Response,
) -> impl Future<Output = anyhow::Result<()>>;
}