Skip to content

Commit 03cc213

Browse files
committed
refactor(tsgolint): make MessageType parsing more idomatic
1 parent af7a3e9 commit 03cc213

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

crates/oxc_linter/src/tsgolint.rs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -610,17 +610,31 @@ pub struct Suggestion {
610610
}
611611

612612
#[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)]
613+
#[repr(u8)]
613614
pub enum MessageType {
614615
Error = 0,
615616
Diagnostic = 1,
616617
}
617618

618-
impl MessageType {
619-
pub fn from_u8(value: u8) -> Option<Self> {
619+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
620+
pub struct InvalidMessageType(pub u8);
621+
622+
impl std::fmt::Display for InvalidMessageType {
623+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
624+
write!(f, "invalid message type: {}", self.0)
625+
}
626+
}
627+
628+
impl std::error::Error for InvalidMessageType {}
629+
630+
impl TryFrom<u8> for MessageType {
631+
type Error = InvalidMessageType;
632+
633+
fn try_from(value: u8) -> Result<Self, InvalidMessageType> {
620634
match value {
621-
0 => Some(MessageType::Error),
622-
1 => Some(MessageType::Diagnostic),
623-
_ => None,
635+
0 => Ok(Self::Error),
636+
1 => Ok(Self::Diagnostic),
637+
_ => Err(InvalidMessageType(value)),
624638
}
625639
}
626640
}
@@ -693,8 +707,8 @@ fn parse_single_message(cursor: &mut std::io::Cursor<&[u8]>) -> Result<TsGoLintM
693707
if cursor.read_exact(&mut message_type_byte).is_err() {
694708
return Err("Failed to read message type byte".to_string());
695709
}
696-
let message_type = MessageType::from_u8(message_type_byte[0])
697-
.ok_or_else(|| "Invalid message type byte".to_string())?;
710+
let message_type = MessageType::try_from(message_type_byte[0])
711+
.map_err(|_| "Invalid message type byte".to_string())?;
698712

699713
let mut payload_bytes = vec![0u8; size];
700714
if cursor.read_exact(&mut payload_bytes).is_err() {

0 commit comments

Comments
 (0)