use alloc::string::String;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct PlatformName(String);
impl PlatformName {
#[must_use]
pub const fn new(name: String) -> Self {
Self(name)
}
#[must_use]
pub fn as_str(&self) -> &str {
&self.0
}
#[must_use]
pub fn into_string(self) -> String {
self.0
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum KeepaliveField {
IdleSeconds,
IntervalSeconds,
ProbeCount,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum KeepaliveOption {
SoKeepalive,
Idle,
Interval,
Count,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum KeepalivePhase {
StartupConfiguration,
AcceptedSocket,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum KeepaliveReadbackMismatch {
SoKeepalive {
requested: bool,
effective: bool,
},
Numeric {
option: NumericKeepaliveOption,
requested: u64,
effective: u64,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum NumericKeepaliveOption {
Idle,
Interval,
Count,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum StartupKeepaliveReason {
Zero {
field: KeepaliveField,
requested: u64,
required_minimum: u64,
},
OutOfRange {
field: KeepaliveField,
requested: u64,
supported_min: u64,
supported_max: u64,
platform: PlatformName,
},
GranularityMismatch {
field: KeepaliveField,
requested: u64,
granularity: u64,
platform: PlatformName,
},
UnsupportedPlatform {
platform: PlatformName,
},
UnsupportedOption {
option: KeepaliveOption,
platform: PlatformName,
},
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum AcceptedSocketKeepaliveReason {
SetFailed {
option: KeepaliveOption,
platform: PlatformName,
os_error: i32,
},
ReadbackFailed {
option: KeepaliveOption,
platform: PlatformName,
os_error: i32,
},
ReadbackMismatch {
mismatch: KeepaliveReadbackMismatch,
platform: PlatformName,
},
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum KeepaliveCertificationFailed {
StartupConfiguration(StartupKeepaliveReason),
AcceptedSocket(AcceptedSocketKeepaliveReason),
}
impl KeepaliveCertificationFailed {
#[must_use]
pub const fn phase(&self) -> KeepalivePhase {
match self {
Self::StartupConfiguration(_) => KeepalivePhase::StartupConfiguration,
Self::AcceptedSocket(_) => KeepalivePhase::AcceptedSocket,
}
}
}