mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-04 02:24:12 +02:00
add serde support for packets
This commit is contained in:
parent
058ee0b96d
commit
03f8b8a424
27 changed files with 556 additions and 490 deletions
|
|
@ -1,8 +1,8 @@
|
|||
use bitbuffer::{BitRead, BitWrite, LittleEndian};
|
||||
|
||||
use crate::{ReadResult, Stream};
|
||||
use bitbuffer::{BitRead, BitWrite, LittleEndian};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ConsoleCmdPacket {
|
||||
pub tick: u32,
|
||||
pub command: String,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,20 @@ use std::convert::TryFrom;
|
|||
use std::iter::once;
|
||||
|
||||
#[derive(
|
||||
BitRead, BitWrite, Debug, Clone, Copy, PartialEq, Eq, Hash, Ord, PartialOrd, Display, FromStr,
|
||||
BitRead,
|
||||
BitWrite,
|
||||
Debug,
|
||||
Clone,
|
||||
Copy,
|
||||
PartialEq,
|
||||
Eq,
|
||||
Hash,
|
||||
Ord,
|
||||
PartialOrd,
|
||||
Display,
|
||||
FromStr,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
)]
|
||||
pub struct ClassId(u16);
|
||||
|
||||
|
|
@ -54,7 +67,7 @@ impl From<&str> for ServerClassName {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(BitRead, BitWrite, Debug, Clone, PartialEq)]
|
||||
#[derive(BitRead, BitWrite, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ServerClass {
|
||||
pub id: ClassId,
|
||||
pub name: ServerClassName,
|
||||
|
|
@ -96,7 +109,7 @@ impl From<&str> for SendTableName {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ParseSendTable {
|
||||
pub name: SendTableName,
|
||||
pub props: Vec<RawSendPropDefinition>,
|
||||
|
|
@ -318,7 +331,7 @@ impl ParseSendTable {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct SendTable {
|
||||
pub name: SendTableName,
|
||||
pub needs_decoder: bool,
|
||||
|
|
@ -326,7 +339,7 @@ pub struct SendTable {
|
|||
pub flattened_props: Vec<SendPropDefinition>,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct DataTablePacket {
|
||||
pub tick: u32,
|
||||
pub tables: Vec<ParseSendTable>,
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
use bitbuffer::{bit_size_of, BitRead, BitWrite, BitWriteStream, Endianness, LittleEndian};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::demo::message::{Message, MessageType};
|
||||
use crate::demo::parser::Encode;
|
||||
use crate::demo::vector::Vector;
|
||||
use crate::{Parse, ParserState, ReadResult, Result, Stream};
|
||||
|
||||
#[derive(Debug, BitRead, BitWrite, PartialEq)]
|
||||
#[derive(Debug, BitRead, BitWrite, PartialEq, Serialize, Deserialize)]
|
||||
pub struct MessagePacketMeta {
|
||||
pub flags: u32, // TODO
|
||||
pub view_angles: ViewAngles,
|
||||
|
|
@ -13,14 +14,15 @@ pub struct MessagePacketMeta {
|
|||
pub sequence_out: u32,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(bound(deserialize = "'a: 'static"))]
|
||||
pub struct MessagePacket<'a> {
|
||||
pub tick: u32,
|
||||
pub messages: Vec<Message<'a>>,
|
||||
pub meta: MessagePacketMeta,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Default)]
|
||||
#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)]
|
||||
pub struct ViewAngles {
|
||||
pub origin: (Vector, Vector),
|
||||
pub angles: (Vector, Vector),
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ use self::stringtable::StringTablePacket;
|
|||
use self::synctick::SyncTickPacket;
|
||||
use self::usercmd::UserCmdPacket;
|
||||
use crate::demo::parser::Encode;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
pub mod consolecmd;
|
||||
pub mod datatable;
|
||||
|
|
@ -19,7 +20,8 @@ pub mod stringtable;
|
|||
pub mod synctick;
|
||||
pub mod usercmd;
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(bound(deserialize = "'a: 'static"))]
|
||||
pub enum Packet<'a> {
|
||||
Sigon(MessagePacket<'a>),
|
||||
Message(MessagePacket<'a>),
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use bitbuffer::{BitRead, BitWrite};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, BitRead, BitWrite, PartialEq)]
|
||||
#[derive(Debug, BitRead, BitWrite, PartialEq, Serialize, Deserialize)]
|
||||
pub struct StopPacket {
|
||||
#[size = 24]
|
||||
pub tick: u32,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use std::fmt;
|
||||
|
||||
use bitbuffer::{BitRead, BitWrite, BitWriteStream, LittleEndian};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fmt;
|
||||
|
||||
use crate::demo::message::stringtable::StringTableMeta;
|
||||
use crate::demo::parser::Encode;
|
||||
|
|
@ -8,7 +8,7 @@ use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
|||
use std::borrow::{Borrow, Cow};
|
||||
use std::cmp::min;
|
||||
|
||||
#[derive(BitRead, BitWrite, Clone, Copy, Debug, PartialEq)]
|
||||
#[derive(BitRead, BitWrite, Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct FixedUserDataSize {
|
||||
#[size = 12]
|
||||
pub size: u16,
|
||||
|
|
@ -16,7 +16,8 @@ pub struct FixedUserDataSize {
|
|||
pub bits: u8,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
#[serde(bound(deserialize = "'a: 'static"))]
|
||||
pub struct StringTable<'a> {
|
||||
pub name: Cow<'a, str>,
|
||||
pub entries: Vec<(u16, StringTableEntry<'a>)>,
|
||||
|
|
@ -144,8 +145,9 @@ fn test_string_table_roundtrip() {
|
|||
});
|
||||
}
|
||||
|
||||
#[derive(BitRead, BitWrite, Clone, Debug, PartialEq)]
|
||||
#[derive(BitRead, BitWrite, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[endianness = "LittleEndian"]
|
||||
#[serde(bound(deserialize = "'a: 'static"))]
|
||||
pub struct ExtraData<'a> {
|
||||
pub byte_len: u16,
|
||||
#[size = "byte_len.saturating_mul(8)"]
|
||||
|
|
@ -159,7 +161,8 @@ impl<'a> ExtraData<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Default, PartialEq)]
|
||||
#[derive(Clone, Default, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(bound(deserialize = "'a: 'static"))]
|
||||
pub struct StringTableEntry<'a> {
|
||||
pub text: Option<Cow<'a, str>>,
|
||||
pub extra_data: Option<ExtraData<'a>>,
|
||||
|
|
@ -208,7 +211,8 @@ impl fmt::Debug for StringTableEntry<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(bound(deserialize = "'a: 'static"))]
|
||||
pub struct StringTablePacket<'a> {
|
||||
pub tick: u32,
|
||||
pub tables: Vec<StringTable<'a>>,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use bitbuffer::{BitRead, BitWrite};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(BitRead, BitWrite, Debug, PartialEq)]
|
||||
#[derive(BitRead, BitWrite, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct SyncTickPacket {
|
||||
pub tick: u32,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use bitbuffer::{BitRead, BitReadStream, BitWrite, BitWriteStream, LittleEndian};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct UserCmdPacket {
|
||||
pub tick: u32,
|
||||
pub sequence_out: u32,
|
||||
|
|
@ -30,7 +31,7 @@ impl BitWrite<LittleEndian> for UserCmdPacket {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite)]
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite, Serialize, Deserialize)]
|
||||
pub struct UserCmd {
|
||||
command_number: Option<u32>,
|
||||
tick_count: Option<u32>,
|
||||
|
|
@ -43,7 +44,7 @@ pub struct UserCmd {
|
|||
mouse_dy: Option<u16>,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite)]
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite, Serialize, Deserialize)]
|
||||
pub struct WeaponSelect {
|
||||
#[size = 11]
|
||||
select: u16,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue