lemon_bugsnag_rs 0.1.2

A library for interacting with the BugSnag error-reporting and sessions APIs.
Documentation
use crate::error::error_client_builder::ErrorClientBuilder;

#[cfg(all(feature = "error-client", feature = "async"))]
use super::non_blocking::ClientBuilderReqwestErrorAsync;
#[cfg(feature = "async")]
use crate::common::traits::decider_trait_async::DeciderTraitAsync;
#[cfg(feature = "async")]
use reqwest::ClientBuilder as ReqwestClientBuilder;

#[cfg(all(feature = "error-client", feature = "sync"))]
use super::blocking::ClientBuilderReqwestErrorSync;
#[cfg(feature = "sync")]
use crate::common::traits::decider_trait_sync::DeciderTraitSync;
#[cfg(feature = "sync")]
use reqwest::blocking::ClientBuilder as ReqwestBlockingClientBuilder;

/// Intermediate struct that implements [DeciderTraitAsync] and
/// [DeciderTraitSync], allowing the user to choose between blocking and
/// non-blocking network clients.
///
/// ```
/// use lemon_bugsnag_rs::common::builder::client_builder::ClientBuilder;
/// use lemon_bugsnag_rs::common::traits::decider_trait_async::DeciderTraitAsync;
///
/// let mut cb = ClientBuilder::error();
///
/// cb.configure(
///     "YOUR_BUGSNAG_API_KEY"
///     , "NAB BugSnag RS Doctest Error Class"
///     , "Some generic error message"
///     , "NAB BugSnag RS Doctest Notifier"
///     , "0.0.2"
///     , "Your application type"
///     , "dev"
/// );
///
/// // This section of code is broken into two pieces for demonstration
/// // purposes. You can also chain the calls to retrieve a client.
/// // `cb.reqwest().non_blocking()`
/// let mut decider = cb.reqwest();
/// let client = decider.non_blocking();
/// ```
pub struct ReqwestErrorDecider {
    pub(crate) builder: ErrorClientBuilder,
}

#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
#[cfg(feature = "async")]
impl DeciderTraitAsync<ClientBuilderReqwestErrorAsync> for ReqwestErrorDecider {
    /// Select a non-blocking backend for your request to the BugSnag API.
    ///
    /// ```
    /// use lemon_bugsnag_rs::common::builder::client_builder::ClientBuilder;
    /// use lemon_bugsnag_rs::common::traits::decider_trait_async::DeciderTraitAsync;
    ///
    /// let mut cb = ClientBuilder::error();
    ///
    /// cb.configure(
    ///     "YOUR_BUGSNAG_API_KEY"
    ///     , "NAB BugSnag RS Doctest Error Class"
    ///     , "Some generic error message"
    ///     , "NAB BugSnag RS Doctest Notifier"
    ///     , "0.0.2"
    ///     , "Your application type"
    ///     , "dev"
    /// );
    ///
    /// let client = cb.reqwest().non_blocking();
    /// ```
    fn non_blocking(self) -> ClientBuilderReqwestErrorAsync {
        ClientBuilderReqwestErrorAsync {
            client_builder: ReqwestClientBuilder::default(),
            options: self.builder.options.clone(),
            api_key: self.builder.api_key.clone(),
            payload_version: self
                .builder
                .payload_version_override
                .clone()
                .unwrap_or(self.builder.payload_version.clone()),
            notifier: self.builder.notifier,
            events: self.builder.events,
        }
    }
}

#[cfg_attr(docsrs, doc(cfg(feature = "sync")))]
#[cfg(feature = "sync")]
impl DeciderTraitSync<ClientBuilderReqwestErrorSync> for ReqwestErrorDecider {
    /// Select a blocking backend for your request to the BugSnag API.
    ///
    /// ```
    /// use lemon_bugsnag_rs::common::builder::client_builder::ClientBuilder;
    /// use lemon_bugsnag_rs::common::traits::decider_trait_sync::DeciderTraitSync;
    ///
    /// let mut cb = ClientBuilder::error();
    ///
    /// cb.configure(
    ///     "YOUR_BUGSNAG_API_KEY"
    ///     , "NAB BugSnag RS Doctest Error Class"
    ///     , "Some generic error message"
    ///     , "NAB BugSnag RS Doctest Notifier"
    ///     , "0.0.2"
    ///     , "Your application type"
    ///     , "dev"
    /// );
    ///
    /// let client = cb.reqwest().blocking();
    /// ```
    fn blocking(self) -> ClientBuilderReqwestErrorSync {
        ClientBuilderReqwestErrorSync {
            client_builder: ReqwestBlockingClientBuilder::default(),
            options: self.builder.options.clone(),
            api_key: self.builder.api_key.clone(),
            payload_version: self
                .builder
                .payload_version_override
                .clone()
                .unwrap_or(self.builder.payload_version.clone()),
            notifier: self.builder.notifier.clone(),
            events: self.builder.events.clone(),
        }
    }
}