exceptionless 0.1.0

Rust client for Exceptionless tracking errors, log messages, and feature usage events
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SubmissionAction {
    Success,
    Retry,
    SplitAndRetry,
    Discard,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TransportResponse {
    pub status_code: u16,
    pub message: Option<String>,
}

impl TransportResponse {
    pub fn new(status_code: u16, message: Option<String>) -> Self {
        Self {
            status_code,
            message,
        }
    }

    pub fn action(&self) -> SubmissionAction {
        match self.status_code {
            200..=299 => SubmissionAction::Success,
            413 => SubmissionAction::SplitAndRetry,
            408 | 429 | 500..=599 => SubmissionAction::Retry,
            _ => SubmissionAction::Discard,
        }
    }

    pub fn is_success(&self) -> bool {
        matches!(self.action(), SubmissionAction::Success)
    }
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SubmissionResult {
    pub action: SubmissionAction,
    pub response: TransportResponse,
}

impl SubmissionResult {
    pub fn from_response(response: TransportResponse) -> Self {
        let action = response.action();
        Self { action, response }
    }
}