celery 0.1.0-alpha

Rust implementation of Celery
Documentation
use async_trait::async_trait;
use futures_util::stream::{Stream, StreamExt};

use crate::protocol::{MessageBody, TryIntoMessage};
use crate::{Error, Task};

#[async_trait]
pub trait Broker {
    type Delivery: TryIntoMessage + Clone;
    type DeliveryError: Into<Error>;
    type Consumer: IntoIterator<
            Item = Result<Self::Delivery, Self::DeliveryError>,
            IntoIter = Self::ConsumerIterator,
        > + Stream<Item = Result<Self::Delivery, Self::DeliveryError>>
        + StreamExt;
    type ConsumerIterator: Iterator<Item = Result<Self::Delivery, Self::DeliveryError>>;

    async fn consume(&self, queue: &str) -> Result<Self::Consumer, Error>;

    async fn ack(&self, delivery: Self::Delivery) -> Result<(), Error>;

    async fn send_task<T: Task>(&self, body: MessageBody<T>, queue: &str) -> Result<(), Error>;
}

pub mod amqp;