Derive Macro durian::DerefPacketManager

#[derive(DerefPacketManager)]
Expand description

Convenience derive macro that implements [Deref] and [DerefMut] for a struct that contains a manager: PacketManager field.

This is especially useful in situations where you must wrap a PacketManager behind a struct, such as in Bevy where you want to insert the PacketManager as a Resource, but can’t annotate the PacketManager struct itself.

For example:

#[derive(DerefPacketManager)]
struct ClientPacketManager {
    manager: PacketManager
}

Generates this code:

struct ClientPacketManager {
    manager: PacketManager
}

impl std::ops::Deref for ClientPacketManager {
    type Target = (durian::PacketManager);

    fn deref(&self) -> &Self::Target {
        &self.manager
    }
}

impl std::ops::DerefMut for ClientPacketManager {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.manager
    }
}

You can then automatically access PacketManager functions through a ClientPacketManager like this:

let manager = ClientPacketManager { manager: PacketManager::new() };
// Directly call PacketManager functions through our manager variable without accessing the underlying field
manager.init_client(ClientConfig::new("127.0.0.1:5001", "127.0.0.1:5000", 2, 2);