diff --git a/crates/oxc_linter/src/tsgolint.rs b/crates/oxc_linter/src/tsgolint.rs index f5c5a93d2804f..d271b67846500 100644 --- a/crates/oxc_linter/src/tsgolint.rs +++ b/crates/oxc_linter/src/tsgolint.rs @@ -610,17 +610,31 @@ pub struct Suggestion { } #[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)] +#[repr(u8)] pub enum MessageType { Error = 0, Diagnostic = 1, } -impl MessageType { - pub fn from_u8(value: u8) -> Option { +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct InvalidMessageType(pub u8); + +impl std::fmt::Display for InvalidMessageType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "invalid message type: {}", self.0) + } +} + +impl std::error::Error for InvalidMessageType {} + +impl TryFrom for MessageType { + type Error = InvalidMessageType; + + fn try_from(value: u8) -> Result { match value { - 0 => Some(MessageType::Error), - 1 => Some(MessageType::Diagnostic), - _ => None, + 0 => Ok(Self::Error), + 1 => Ok(Self::Diagnostic), + _ => Err(InvalidMessageType(value)), } } } @@ -693,8 +707,8 @@ fn parse_single_message(cursor: &mut std::io::Cursor<&[u8]>) -> Result