#[async_trait]
pub trait Broker: Send + Sync {
async fn connect(&mut self, broker_url: &str) -> Result<(), BroccoliError>;
async fn publish(
&self,
queue_name: &str,
disambiguator: Option<String>,
message: &[InternalBrokerMessage],
options: Option<PublishOptions>,
) -> Result<Vec<InternalBrokerMessage>, BroccoliError>;
async fn consume(
&self,
queue_name: &str,
options: Option<ConsumeOptions>,
) -> Result<InternalBrokerMessage, BroccoliError>;
async fn try_consume(
&self,
queue_name: &str,
options: Option<ConsumeOptions>,
) -> Result<Option<InternalBrokerMessage>, BroccoliError>;
async fn acknowledge(
&self,
queue_name: &str,
message: InternalBrokerMessage,
) -> Result<(), BroccoliError>;
async fn reject(
&self,
queue_name: &str,
message: InternalBrokerMessage,
) -> Result<(), BroccoliError>;
async fn cancel(
&self,
queue_name: &str,
message_id: String,
) -> Result<(), BroccoliError>;
async fn size(
&self,
queue_name: &str,
) -> Result<HashMap<String, u64>, BroccoliError>;
}