#[repr(u8)]
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum Method {
NoAuth = 0x00,
GssApi = 0x01,
Password = 0x02,
IanaReserved(u8),
Private(u8),
NoAcceptableMethods = 0xff,
}
impl From<u8> for Method {
fn from(value: u8) -> Self {
match value {
0x00 => Method::NoAuth,
0x01 => Method::GssApi,
0x02 => Method::Password,
0x03..=0x7f => Method::IanaReserved(value),
0x80..=0xfe => Method::Private(value),
0xff => Method::NoAcceptableMethods,
}
}
}
impl From<Method> for u8 {
fn from(value: Method) -> Self {
From::<&Method>::from(&value)
}
}
impl From<&Method> for u8 {
fn from(value: &Method) -> Self {
match value {
Method::NoAuth => 0x00,
Method::GssApi => 0x01,
Method::Password => 0x02,
Method::IanaReserved(value) => *value,
Method::Private(value) => *value,
Method::NoAcceptableMethods => 0xff,
}
}
}
impl std::fmt::Display for Method {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
Method::NoAuth => write!(f, "NoAuth"),
Method::GssApi => write!(f, "GssApi"),
Method::Password => write!(f, "UserPass"),
Method::IanaReserved(value) => write!(f, "IanaReserved({value:#x})"),
Method::Private(value) => write!(f, "Private({value:#x})"),
Method::NoAcceptableMethods => write!(f, "NoAcceptableMethods"),
}
}
}