use ruststream::RetryDeclaration;
use crate::error::AmqpError;
mod classic;
mod quorum;
mod spec;
pub use classic::RabbitQueue;
pub use quorum::RabbitQuorumQueue;
pub use spec::QueueSpec;
pub(crate) use spec::{DEAD_LETTER_EXCHANGE, DEAD_LETTER_ROUTING_KEY, declared_arguments};
#[cfg(feature = "testing")]
pub(crate) use spec::{DELIVERY_LIMIT, QueueKind};
mod sealed {
pub trait Sealed {}
impl Sealed for super::RabbitQueue {}
impl Sealed for super::RabbitQuorumQueue {}
}
pub trait QueueDescriptor: sealed::Sealed {
#[doc(hidden)]
fn spec(&self) -> &QueueSpec;
#[doc(hidden)]
fn declared_retry(&self) -> Option<&RetryDeclaration>;
#[doc(hidden)]
fn check_retry(&self, declares_topology: bool) -> Result<(), AmqpError>;
}
impl QueueDescriptor for RabbitQueue {
fn spec(&self) -> &QueueSpec {
self.spec()
}
fn declared_retry(&self) -> Option<&RetryDeclaration> {
None
}
fn check_retry(&self, _declares_topology: bool) -> Result<(), AmqpError> {
Ok(())
}
}
impl QueueDescriptor for RabbitQuorumQueue {
fn spec(&self) -> &QueueSpec {
self.spec()
}
fn declared_retry(&self) -> Option<&RetryDeclaration> {
Some(self.retry())
}
fn check_retry(&self, declares_topology: bool) -> Result<(), AmqpError> {
self.check_retry(declares_topology)
}
}