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);
}
}