ntfy 0.9.1

Library for sending notifications over ntfy
Documentation
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;

/// Creates a [`SubscriberBuilder`]
#[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> {
    /// Subscribe to ntfy server topic
    #[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> {
    /// Subscribe to ntfy server topic
    #[inline]
    pub fn subscribe<S>(&self, topic: S) -> Result<BlockingMessageStream, Error>
    where
        S: AsRef<str>,
    {
        self.inner.subscribe(&self.url, topic.as_ref())
    }
}