tonlib-tlb-derive 0.1.0

Derive macro for tonlib-core TLB types
Documentation
use tonlib_tlb_derive::TLB;

#[derive(Debug, Clone, PartialEq, Eq, TLB)]
struct WrappedValue {
    #[tlb(bit_len = 5)]
    count: u8,
}

#[derive(Debug, Clone, PartialEq, Eq, TLB)]
enum MixedEnum {
    #[tlb(tag = "$0")]
    Unit,
    #[tlb(tag = "$10")]
    Named { count: u8 },
    #[tlb(tag = "$11")]
    Wrapped(WrappedValue),
}

#[derive(Debug, Clone, PartialEq, Eq, TLB)]
struct FallbackValue(#[tlb(bit_len = 6)] u8);

#[derive(Debug, Clone, PartialEq, Eq, TLB)]
enum TaggedOrFallback {
    #[tlb(tag = "$10")]
    Tagged(WrappedValue),
    Fallback(FallbackValue),
}

mod mixed_enum_unit {
    use super::MixedEnum;
    use tl_core::tlb_types::tlb::TLB;

    #[test]
    fn should_round_trip() {
        let value = MixedEnum::Unit;

        let cell = value.to_cell().unwrap();
        let decoded = MixedEnum::read(&mut cell.parser()).unwrap();

        assert_eq!(decoded, value);
    }
}

mod mixed_enum_named {
    use super::MixedEnum;
    use tl_core::tlb_types::tlb::TLB;

    #[test]
    fn should_round_trip() {
        let value = MixedEnum::Named { count: 9 };

        let cell = value.to_cell().unwrap();
        let decoded = MixedEnum::read(&mut cell.parser()).unwrap();

        assert_eq!(decoded, value);
    }
}

mod mixed_enum_wrapped {
    use super::{MixedEnum, WrappedValue};
    use tl_core::tlb_types::tlb::TLB;

    #[test]
    fn should_round_trip() {
        let value = MixedEnum::Wrapped(WrappedValue { count: 0b1_1111 });

        let cell = value.to_cell().unwrap();
        let decoded = MixedEnum::read(&mut cell.parser()).unwrap();

        assert_eq!(decoded, value);
    }
}

mod tagged_or_fallback_tagged {
    use super::{TaggedOrFallback, WrappedValue};
    use tl_core::tlb_types::tlb::TLB;

    #[test]
    fn should_round_trip() {
        let value = TaggedOrFallback::Tagged(WrappedValue { count: 7 });

        let cell = value.to_cell().unwrap();
        let decoded = TaggedOrFallback::read(&mut cell.parser()).unwrap();

        assert_eq!(decoded, value);
    }
}

mod tagged_or_fallback_fallback {
    use super::{FallbackValue, TaggedOrFallback};
    use tl_core::tlb_types::tlb::TLB;

    #[test]
    fn should_round_trip() {
        let value = TaggedOrFallback::Fallback(FallbackValue(0b00_1111));

        let cell = value.to_cell().unwrap();
        let decoded = TaggedOrFallback::read(&mut cell.parser()).unwrap();

        assert_eq!(decoded, value);
    }
}