1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-04 02:24:12 +02:00

switch from enum-primitive-derive to num_enum

This commit is contained in:
Robin Appelman 2019-12-16 14:47:18 +01:00
commit c4f9b7bfb8
6 changed files with 155 additions and 315 deletions

View file

@ -1,5 +1,5 @@
use enum_primitive_derive::Primitive;
use num_traits::FromPrimitive;
use num_enum::TryFromPrimitive;
use std::convert::TryFrom;
pub use generated::*;
use serde::{Deserialize, Serialize};
@ -28,7 +28,7 @@ pub mod tempentities;
pub mod usermessage;
pub mod voice;
#[derive(Primitive, Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
#[derive(TryFromPrimitive, Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum MessageType {
Empty = 0,
@ -64,8 +64,7 @@ pub enum MessageType {
impl Parse for MessageType {
fn parse(stream: &mut Stream, _state: &ParserState) -> Result<Self> {
let raw = stream.read_int(6)?;
let prop_type: Option<MessageType> = MessageType::from_u8(raw);
prop_type.ok_or(ParseError::InvalidMessageType(raw))
MessageType::try_from(raw).map_err(|_| ParseError::InvalidMessageType(raw))
}
}

View file

@ -1,12 +1,13 @@
use bitstream_reader::{BitRead, LittleEndian, ReadError};
use enum_primitive_derive::Primitive;
use num_traits::FromPrimitive;
use num_enum::TryFromPrimitive;
use serde::{Deserialize, Serialize};
use std::convert::TryFrom;
use crate::demo::parser::ParseBitSkip;
use crate::{ParseError, ReadResult, Result, Stream};
#[derive(Primitive, Clone, Copy, Debug)]
#[derive(TryFromPrimitive, Clone, Copy, Debug)]
#[repr(u8)]
pub enum UserMessageType {
Geiger = 0,
Train = 1,
@ -83,7 +84,7 @@ pub enum UserMessage {
impl BitRead<LittleEndian> for UserMessage {
fn read(stream: &mut Stream) -> ReadResult<Self> {
let message_type =
UserMessageType::from_u8(stream.read()?).unwrap_or(UserMessageType::Unknown);
UserMessageType::try_from(stream.read::<u8>()?).unwrap_or(UserMessageType::Unknown);
let length = stream.read_int(11)?;
let mut data = stream.read_bits(length)?;
let message = match message_type {