use crate::operation::{RequestIdPolicy, RetryEligibility};
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum DiagnosticErrorCategory {
Preparation,
Authorization,
Endpoint,
Transport,
ResponseTransaction,
ResponsePolicy,
Decode,
}
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum DiagnosticRetryCategory {
Ineligible,
ExplicitPolicy,
}
impl From<RetryEligibility> for DiagnosticRetryCategory {
fn from(value: RetryEligibility) -> Self {
match value {
RetryEligibility::Never => Self::Ineligible,
RetryEligibility::ExplicitPolicy => Self::ExplicitPolicy,
}
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum DiagnosticRequestId {
Discarded,
Absent,
Protected,
Retainable,
}
impl DiagnosticRequestId {
pub(crate) const fn classify(policy: RequestIdPolicy, present: bool) -> Self {
match (policy, present) {
(RequestIdPolicy::Discard, _) => Self::Discarded,
(RequestIdPolicy::Protected | RequestIdPolicy::Retain, false) => Self::Absent,
(RequestIdPolicy::Protected, true) => Self::Protected,
(RequestIdPolicy::Retain, true) => Self::Retainable,
}
}
}