mirror of
https://github.com/italicsjenga/valence.git
synced 2024-12-23 22:41:30 +11:00
c5557e744d
## Description - Move all packets out of `valence_core` and into the places where they're actually used. This has a few benefits: - Avoids compiling code for packets that go unused when feature flags are disabled. - Code is distributed more uniformly across crates, improving compilation times. - Improves local reasoning when everything relevant to a module is defined in the same place. - Easier to share code between the packet consumer and the packet. - Tweak `Packet` macro syntax. - Update `syn` to 2.0. - Reorganize some code in `valence_client` (needs further work). - Impl `WritePacket` for `Instance`. - Remove packet enums such as `S2cPlayPacket` and `C2sPlayPacket`. - Replace `assert_packet_count` and `assert_packet_order` macros with non-macro methods. To prevent this PR from getting out of hand, I've disabled the packet inspector and stresser until they have been rewritten to account for these changes.
37 lines
883 B
Rust
37 lines
883 B
Rust
use heck::ToShoutySnakeCase;
|
|
use proc_macro2::TokenStream;
|
|
use quote::quote;
|
|
use serde::Deserialize;
|
|
use valence_build_utils::ident;
|
|
|
|
#[derive(Deserialize)]
|
|
struct Packet {
|
|
name: String,
|
|
side: String,
|
|
state: String,
|
|
id: i32,
|
|
}
|
|
|
|
pub fn build() -> anyhow::Result<TokenStream> {
|
|
let packets: Vec<Packet> =
|
|
serde_json::from_str(include_str!("../../../extracted/packets.json"))?;
|
|
|
|
let mut consts = TokenStream::new();
|
|
|
|
for packet in packets {
|
|
let stripped_name = packet.name.strip_suffix("Packet").unwrap_or(&packet.name);
|
|
|
|
let name_ident = ident(stripped_name.to_shouty_snake_case());
|
|
let id = packet.id;
|
|
|
|
let doc = format!("Side: {}\n\nState: {}", packet.side, packet.state);
|
|
|
|
consts.extend([quote! {
|
|
#[doc = #doc]
|
|
pub const #name_ident: i32 = #id;
|
|
}]);
|
|
}
|
|
|
|
Ok(consts)
|
|
}
|