#packet #encode-decode #websocket #minecraft #tcp #struct #decoding

nightly no-std packetize

高效编码和解码您的结构体

89 次打破发布

0.95.0 2024 年 8 月 18 日
0.93.0 2024 年 8 月 18 日
0.51.0 2024 年 7 月 30 日

446Rust 模式

Download history 955/week @ 2024-07-09 1494/week @ 2024-07-16 1679/week @ 2024-07-23 744/week @ 2024-07-30 1810/week @ 2024-08-06 2778/week @ 2024-08-13

每月 7,014 次下载

MIT 许可证

22KB
568

packetize

  • 支持网络数据包的快速编码和解码。
  • 具有宏的包帧功能。
  • 设计用于多种包格式(例如,WebSocket、Minecraft、TCP)
use fastbuf::Buffer;
use packetize::ClientBoundPacketStream;
use packetize::{streaming_packets, Decode, Encode, SimplePacketStreamFormat};

#[streaming_packets]
#[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
pub enum PacketStreamState {
    #[default]
    HandShake(#[change_state_to(Login)] HandShakeS2c),
    Login(LoginRequestS2c, #[id(1)] LoginSuccessC2s),
    //...
}

#[derive(Encode, Decode)]
pub struct HandShakeS2c {
    protocol_version: i32,
}

#[derive(Encode, Decode)]
pub struct LoginRequestS2c {}

#[derive(Encode, Decode)]
pub struct LoginSuccessC2s {}

let buf = &mut Buffer::<100>::new();
let mut state = PacketStreamState::HandShake;
state
    .encode_client_bound_packet(
        &HandShakeS2c {
            protocol_version: 123,
        }
        .into(),
        buf,
        &mut SimplePacketStreamFormat,
    )
    .unwrap();
assert_eq!(state, PacketStreamState::Login);

依赖关系

~0.6–1.1MB
~24K SLoC