use url::Url;
#[cfg(feature = "async-subscriber")]
mod r#async;
#[cfg(feature = "blocking-subscriber")]
mod blocking;
pub mod builder;
mod request;
#[cfg(feature = "async-subscriber")]
pub use self::r#async::{Async, MessageStream as AsyncMessageStream};
#[cfg(feature = "blocking-subscriber")]
pub use self::blocking::{Blocking, MessageStream as BlockingMessageStream};
pub use self::builder::SubscriberBuilder;
use crate::error::Error;
#[inline]
pub fn builder<S>(url: S) -> SubscriberBuilder
where
S: Into<String>,
{
SubscriberBuilder::new(url)
}
#[derive(Debug, Clone)]
pub struct Subscriber<T>
where
T: Clone,
{
url: Url,
inner: T,
}
#[cfg(feature = "async-subscriber")]
impl Subscriber<Async> {
#[inline]
pub async fn subscribe<S>(&self, topic: S) -> Result<AsyncMessageStream, Error>
where
S: AsRef<str>,
{
self.inner.subscribe(&self.url, topic.as_ref()).await
}
}
#[cfg(feature = "blocking-subscriber")]
impl Subscriber<Blocking> {
#[inline]
pub fn subscribe<S>(&self, topic: S) -> Result<BlockingMessageStream, Error>
where
S: AsRef<str>,
{
self.inner.subscribe(&self.url, topic.as_ref())
}
}