tonstruct 0.0.3

TON blockchain types serialization tool for Rust
Documentation
use num_bigint::{BigInt, BigUint};
use tonlib_core::cell::CellBuilder;
use tonstruct::fields::Int;
use tonstruct::ToCell;

const INT_VALUE: i32 = 0xFF;
const NEG_INT_VALUE: i32 = -0xFF;

#[test]
fn test_ser_int() {
    #[derive(ToCell)]
    struct Message {
        integer: Int<32>,
    }
    let message = Message {
        integer: Int::from(BigInt::from(INT_VALUE)),
    };
    let actual = ToCell::to_cell(&message).unwrap();

    let expected = CellBuilder::new()
        .store_bit(false)
        .unwrap()
        .store_uint(31, &BigUint::from(INT_VALUE as u32))
        .unwrap()
        .build()
        .unwrap();

    assert_eq!(expected, actual);
}

#[test]
fn test_ser_neg_int() {
    #[derive(ToCell)]
    struct Message {
        integer: Int<32>,
    }
    let message = Message {
        integer: Int::from(BigInt::from(NEG_INT_VALUE)),
    };
    let actual = ToCell::to_cell(&message).unwrap();

    let expected = CellBuilder::new()
        .store_bit(true)
        .unwrap()
        .store_uint(31, &BigUint::from(INT_VALUE as u32))
        .unwrap()
        .build()
        .unwrap();

    assert_eq!(expected, actual);
}