netherite 0.1.3

A tokio implementation of the Minecraft Protocol with derive macros
Documentation
mod serialize {
    use netherite::{assert_serialization, Serialize};
    use std::mem::size_of;

    #[test]
    fn derive_empty() {
        #[derive(Serialize)]
        struct MyStruct {}
    }

    #[test]
    fn derive_fields() {
        #[derive(Serialize, Default)]
        struct MyStruct {
            field1: u32,
            field2: u16,
            unit: (),
            field3: u16,
        }

        let instance = MyStruct::default();

        assert_eq!(instance.size(), size_of::<u64>());
        assert_serialization!(instance => &[0; size_of::<u64>()]);
    }

    #[test]
    fn derive_generic() {
        #[derive(Serialize)]
        struct MyStruct<T> {
            unit: T,
        }

        let instance = MyStruct { unit: 0u32 };
        assert_eq!(instance.size(), std::mem::size_of::<u32>());
        assert_serialization!(instance => &[0; size_of::<u32>()]);
    }

    #[test]
    fn derive_lifetime() {
        #[derive(Serialize)]
        struct MyStruct<'a> {
            unit: &'a u32,
        }

        let instance = MyStruct { unit: &0u32 };
        assert_eq!(instance.size(), std::mem::size_of::<u32>());
        assert_serialization!(instance => &[0; size_of::<u32>()]);
    }
}

#[allow(dead_code)]
mod deserialize {
    use std::mem::size_of;

    use bytes::Bytes;
    use netherite::{assert_deserialization, Deserialize};

    #[test]
    fn derive_empty() {
        #[derive(Deserialize)]
        struct MyStruct {}
    }

    #[test]
    fn derive_fields() {
        #[derive(Deserialize, Default, PartialEq)]
        struct MyStruct {
            field1: u32,
            field2: u32,
            unit: (),
        }

        let instance = MyStruct::default();
        assert_deserialization!(&[0; size_of::<u64>()] => instance);
    }

    #[test]
    fn derive_generic() {
        #[derive(Deserialize, Default, PartialEq)]
        struct MyStruct<T> {
            generic: T,
        }

        let instance: MyStruct<u32> = MyStruct::default();
        assert_deserialization!(&[0; size_of::<u32>()] => instance);
    }

    #[test]
    fn derive_lifetime() {
        #[derive(Deserialize, Default, PartialEq)]
        struct MyStruct<T> {
            field1: Bytes,
            field2: T,
        }

        let instance: MyStruct<Bytes> = MyStruct::default();
        assert_deserialization!(&[0, 0] => instance);
    }
}