lemon_bugsnag_rs 0.1.2

A library for interacting with the BugSnag error-reporting and sessions APIs.
Documentation
use reqwest::blocking::Client;
use url::Url;

use crate::{
    common::{error::Error, traits::client_trait_sync::ClientTraitSync},
    error::payload::Payload,
};

/// Synchronous Reqwest client for the BugSnag error-reporting API.
///
/// ```
/// use lemon_bugsnag_rs::common::builder::client_builder::ClientBuilder;
/// use lemon_bugsnag_rs::common::traits::decider_trait_sync::DeciderTraitSync;
///
/// let mut error_builder = ClientBuilder::error();
///
/// let configured_builder = error_builder.configure(
///     "Fake API Key",
///     "Doctest configure example error class",
///     "It's not really an error, per se...",
///     "ErrorClientBuilder documentation test notifier",
///     "1.0.0",
///     "Doctest app type",
///     "Production, of course"
/// );
///
/// // Retrieve a ReqwestErrorSync.
/// let client = configured_builder.reqwest().blocking();
/// ```
pub struct ReqwestErrorSync {
    /// The API endpiont URL.
    pub url: Url,
    ///  A blocking Reqwest client.
    pub client: Client,
    pub(crate) payload: Payload,
}

impl ClientTraitSync for ReqwestErrorSync {
    type Response = reqwest::blocking::Response;
    type Error = Error;

    /// Send the payload to the BugSnag error API.
    /// ```
    /// use lemon_bugsnag_rs::common::builder::client_builder::ClientBuilder;
    /// use lemon_bugsnag_rs::common::traits::decider_trait_sync::DeciderTraitSync;
    /// use lemon_bugsnag_rs::common::traits::backend_builder_trait_sync::BackendBuilderTraitSync;
    ///
    /// let mut error_builder = ClientBuilder::error();
    ///
    /// let configured_builder = error_builder.configure(
    ///     "Fake API Key",
    ///     "Doctest configure example error class",
    ///     "It's not really an error, per se...",
    ///     "ErrorClientBuilder documentation test notifier",
    ///     "1.0.0",
    ///     "Doctest app type",
    ///     "Production, of course"
    /// );
    ///
    /// let client = configured_builder.reqwest().blocking().build().unwrap();
    ///
    /// # #[cfg(norun)]
    /// client.send();
    /// ```
    fn send(&mut self) -> Result<Self::Response, Self::Error> {
        Ok(self
            .client
            .post(self.url.clone())
            .json(&self.payload)
            .send()?)
    }
}