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

schema fixes

This commit is contained in:
Robin Appelman 2021-07-27 18:26:34 +02:00
commit 2d3708d027
9 changed files with 10516 additions and 12308 deletions

22
Cargo.lock generated
View file

@ -4,9 +4,9 @@ version = 3
[[package]] [[package]]
name = "addr2line" name = "addr2line"
version = "0.15.2" version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a" checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
dependencies = [ dependencies = [
"gimli", "gimli",
] ]
@ -54,9 +54,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]] [[package]]
name = "backtrace" name = "backtrace"
version = "0.3.60" version = "0.3.61"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7815ea54e4d821e791162e078acbebfd6d8c8939cd559c9335dceb1c8ca7282" checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01"
dependencies = [ dependencies = [
"addr2line", "addr2line",
"cc", "cc",
@ -79,7 +79,9 @@ dependencies = [
[[package]] [[package]]
name = "bitbuffer" name = "bitbuffer"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "650346fecc0be01be480d078b014cc0deb000d26790a53f6ef854dda35f87d62"
dependencies = [ dependencies = [
"bitbuffer_derive", "bitbuffer_derive",
"err-derive", "err-derive",
@ -92,6 +94,8 @@ dependencies = [
[[package]] [[package]]
name = "bitbuffer_derive" name = "bitbuffer_derive"
version = "0.10.0" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4090254bfbc71442ff4a426ddba663346e26fd14b55b259281f763e350d7f621"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -235,9 +239,9 @@ checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394"
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.24.0" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
@ -435,9 +439,9 @@ dependencies = [
[[package]] [[package]]
name = "object" name = "object"
version = "0.25.3" version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a38f2be3697a57b4060074ff41b44c16870d916ad7877c17696e063257482bc7" checksum = "c55827317fb4c08822499848a14237d2874d6f139828893017237e7ab93eb386"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]

View file

@ -26,7 +26,7 @@ path = "src/bin/schema.rs"
required-features = ["schema"] required-features = ["schema"]
[dependencies] [dependencies]
bitbuffer = { version = "0.10", features = ["serde"], path = "../../bitbuffer" } bitbuffer = { version = "0.10", features = ["serde"] }
num_enum = "0.5" num_enum = "0.5"
num-traits = "0.2" num-traits = "0.2"
enumflags2 = { version = "0.7", features = ["serde"] } enumflags2 = { version = "0.7", features = ["serde"] }
@ -54,6 +54,7 @@ iai = "0.1"
[profile.release] [profile.release]
lto = true lto = true
debug = true
[profile.dev] [profile.dev]
opt-level = 2 opt-level = 2

View file

@ -383,6 +383,7 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
#[cfg_attr(feature = "wasm", derive(schemars::JsonSchema))] #[cfg_attr(feature = "wasm", derive(schemars::JsonSchema))]
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum GameEvent { pub enum GameEvent {
#(#event_variants)* #(#event_variants)*
Unknown(RawGameEvent), Unknown(RawGameEvent),

22633
schema.json

File diff suppressed because it is too large Load diff

View file

@ -6282,6 +6282,7 @@ impl ReplayServerErrorEvent {
} }
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum GameEvent { pub enum GameEvent {
ServerSpawn(Box<ServerSpawnEvent>), ServerSpawn(Box<ServerSpawnEvent>),
ServerChangeLevelFailed(ServerChangeLevelFailedEvent), ServerChangeLevelFailed(ServerChangeLevelFailedEvent),

View file

@ -66,6 +66,7 @@ pub enum MessageType {
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(bound(deserialize = "'a: 'static"))] #[serde(bound(deserialize = "'a: 'static"))]
#[serde(tag = "type")]
pub enum Message<'a> { pub enum Message<'a> {
Empty, Empty,
File(FileMessage), File(FileMessage),

View file

@ -382,13 +382,7 @@ impl PacketEntitiesMessage {
state: &ParserState, state: &ParserState,
) -> Result<()> { ) -> Result<()> {
let bits = log_base2(state.server_classes.len()) + 1; let bits = log_base2(state.server_classes.len()) + 1;
let (class_index, _class) = state u16::from(entity.server_class).write_sized(stream, bits as usize)?;
.server_classes
.iter()
.enumerate()
.find(|(_, class)| entity.server_class == class.id)
.ok_or(ParseError::UnknownServerClass(entity.server_class))?;
class_index.write_sized(stream, bits as usize)?;
entity.serial_number.write_sized(stream, 10)?; entity.serial_number.write_sized(stream, 10)?;
Ok(()) Ok(())

View file

@ -74,6 +74,7 @@ pub enum UserMessageType {
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(bound(deserialize = "'a: 'static"))] #[serde(bound(deserialize = "'a: 'static"))]
#[serde(tag = "type")]
pub enum UserMessage<'a> { pub enum UserMessage<'a> {
SayText2(Box<SayText2Message>), SayText2(Box<SayText2Message>),
Text(Box<TextMessage>), Text(Box<TextMessage>),
@ -81,7 +82,7 @@ pub enum UserMessage<'a> {
Train(TrainMessage), Train(TrainMessage),
VoiceSubtitle(VoiceSubtitleMessage), VoiceSubtitle(VoiceSubtitleMessage),
Shake(ShakeMessage), Shake(ShakeMessage),
Unknown(u8, UnknownUserMessage<'a>), Unknown(UnknownUserMessage<'a>),
} }
impl UserMessage<'_> { impl UserMessage<'_> {
@ -93,7 +94,7 @@ impl UserMessage<'_> {
UserMessage::Train(_) => UserMessageType::Train as u8, UserMessage::Train(_) => UserMessageType::Train as u8,
UserMessage::VoiceSubtitle(_) => UserMessageType::VoiceSubtitle as u8, UserMessage::VoiceSubtitle(_) => UserMessageType::VoiceSubtitle as u8,
UserMessage::Shake(_) => UserMessageType::Shake as u8, UserMessage::Shake(_) => UserMessageType::Shake as u8,
UserMessage::Unknown(ty, _) => *ty, UserMessage::Unknown(msg) => msg.raw_type,
} }
} }
} }
@ -111,13 +112,19 @@ impl<'a> BitRead<'a, LittleEndian> for UserMessage<'a> {
UserMessageType::Train => UserMessage::Train(data.read()?), UserMessageType::Train => UserMessage::Train(data.read()?),
UserMessageType::VoiceSubtitle => UserMessage::VoiceSubtitle(data.read()?), UserMessageType::VoiceSubtitle => UserMessage::VoiceSubtitle(data.read()?),
UserMessageType::Shake => UserMessage::Shake(data.read()?), UserMessageType::Shake => UserMessage::Shake(data.read()?),
_ => UserMessage::Unknown(message_type as u8, data.read()?), _ => UserMessage::Unknown(UnknownUserMessage {
raw_type: message_type as u8,
data,
}),
} }
} }
Err(BitError::UnmatchedDiscriminant { discriminant, .. }) => { Err(BitError::UnmatchedDiscriminant { discriminant, .. }) => {
let length = stream.read_int(11)?; let length = stream.read_int(11)?;
let mut data = stream.read_bits(length)?; let data = stream.read_bits(length)?;
UserMessage::Unknown(discriminant as u8, data.read()?) UserMessage::Unknown(UnknownUserMessage {
raw_type: discriminant as u8,
data,
})
} }
Err(e) => return Err(e), Err(e) => return Err(e),
}; };
@ -142,7 +149,7 @@ impl<'a> BitWrite<LittleEndian> for UserMessage<'a> {
UserMessage::Train(body) => stream.write(body), UserMessage::Train(body) => stream.write(body),
UserMessage::VoiceSubtitle(body) => stream.write(body), UserMessage::VoiceSubtitle(body) => stream.write(body),
UserMessage::Shake(body) => stream.write(body), UserMessage::Shake(body) => stream.write(body),
UserMessage::Unknown(_, body) => stream.write(body), UserMessage::Unknown(body) => stream.write(&body.data),
})?; })?;
Ok(()) Ok(())
@ -368,19 +375,6 @@ pub struct ShakeMessage {
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(bound(deserialize = "'a: 'static"))] #[serde(bound(deserialize = "'a: 'static"))]
pub struct UnknownUserMessage<'a> { pub struct UnknownUserMessage<'a> {
raw_type: u8,
data: Stream<'a>, data: Stream<'a>,
} }
impl<'a> BitRead<'a, LittleEndian> for UnknownUserMessage<'a> {
fn read(stream: &mut Stream<'a>) -> ReadResult<Self> {
Ok(UnknownUserMessage {
data: stream.read_bits(stream.bits_left())?,
})
}
}
impl<'a> BitWrite<LittleEndian> for UnknownUserMessage<'a> {
fn write(&self, stream: &mut BitWriteStream<LittleEndian>) -> ReadResult<()> {
self.data.write(stream)
}
}

View file

@ -23,6 +23,7 @@ pub mod usercmd;
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(bound(deserialize = "'a: 'static"))] #[serde(bound(deserialize = "'a: 'static"))]
#[serde(tag = "type")]
pub enum Packet<'a> { pub enum Packet<'a> {
Sigon(MessagePacket<'a>), Sigon(MessagePacket<'a>),
Message(MessagePacket<'a>), Message(MessagePacket<'a>),