use std::sync::atomic::{AtomicU8, Ordering};
use strum::{AsRefStr, Display, EnumString};
#[derive(Clone, Copy, Debug, Default, Display, Hash, PartialEq, Eq, AsRefStr, EnumString)]
#[repr(u8)]
#[strum(serialize_all = "UPPERCASE")]
pub enum ConnectionMode {
#[default]
Active = 0,
Reconnect = 1,
Disconnect = 2,
Closed = 3,
}
impl ConnectionMode {
#[inline]
#[must_use]
pub fn from_u8(value: u8) -> Self {
match value {
0 => Self::Active,
1 => Self::Reconnect,
2 => Self::Disconnect,
3 => Self::Closed,
_ => panic!("Invalid `ConnectionMode` value: {value}"),
}
}
#[inline]
#[must_use]
pub fn from_atomic(value: &AtomicU8) -> Self {
Self::from_u8(value.load(Ordering::SeqCst))
}
#[inline]
#[must_use]
pub const fn as_u8(self) -> u8 {
self as u8
}
#[inline]
#[must_use]
pub const fn is_active(&self) -> bool {
matches!(self, Self::Active)
}
#[inline]
#[must_use]
pub const fn is_reconnect(&self) -> bool {
matches!(self, Self::Reconnect)
}
#[inline]
#[must_use]
pub const fn is_disconnect(&self) -> bool {
matches!(self, Self::Disconnect)
}
#[inline]
#[must_use]
pub const fn is_closed(&self) -> bool {
matches!(self, Self::Closed)
}
}