#macro #netcode #packets #gamedev #proc-macro #packet #durian

durian_proc_macros

为 durian 包提供过程宏,简化 Packet 结构体的创建

3 个不稳定版本

0.2.1 2023 年 7 月 30 日
0.2.0 2023 年 7 月 30 日
0.1.0 2023 年 2 月 19 日

#19#netcode


3 个包中使用 (通过 durian_macros)

MIT 许可证

15KB
158

durian_proc_macros

为 durian 包提供过程宏

这些宏不应单独使用!这些宏依赖于在 durian 中定义的 Traits 和 paths

包含几个宏,可以帮助自动生成 PacketPacketBuilder 的 Impl 块。唯一的要求是该结构必须是可反序列化的,这意味着嵌套字段也必须是可反序列化的。

#[bincode_packet] 将使用 bincode 反/序列化你的 Packet,并自动应用必要的 derive 宏。

use durian::bincode_packet;

// Automatically implements Packet, and generates a PositionPacketBuilder that implements 
// PacketBuilder.  You can also add other macros such as derive macros so long s they don't
// conflict with what #[bincode_packet] adds (See bincode_packet documentation).
#[bincode_packet]
#[derive(Debug)]
struct Position {
    x: i32,
    y: i32
}

// Works for Unit (empty) structs as well
#[bincode_packet]
struct Ack;

你也可以手动使用 derive 宏 (BinPacketUnitPacket)

use durian::serde::{Deserialize, Serialize};
use durian::{BinPacket, UnitPacket};

#[derive(Serialize, Deserialize, BinPacket)]
#[serde(crate = "durian::serde")]
struct Position { x: i32, y: i32 }

#[derive(UnitPacket)]
struct Ack;

依赖项

~0.6–1.2MB
~29K SLoC