devol_accounts_kit/instructions_data/
withdraw_token.rs

1use crate::instructions_data::dvl_deserializable_instruction::DvlDeserializableInstruction;
2
3pub const INSTRUCTION_WITHDRAW_TOKEN_SIZE: usize = 16;
4pub const INSTRUCTION_WITHDRAW_TOKEN_VERSION: u8 = 2;
5
6#[repr(C)]
7pub struct InstructionWithdrawToken {
8    pub cmd: u8,
9    pub version: u8,
10    pub reserved: [u8; 2],
11    pub mint_id: u32,
12    pub amount: u64,
13}
14
15impl<'a> DvlDeserializableInstruction<'a> for InstructionWithdrawToken {
16    #[inline(always)]
17    fn expected_size() -> usize {INSTRUCTION_WITHDRAW_TOKEN_SIZE}
18    #[inline(always)]
19    fn expected_version() -> u8 {INSTRUCTION_WITHDRAW_TOKEN_VERSION}
20}
21
22#[cfg(not(feature = "on-chain"))]
23#[cfg(test)]
24mod tests {
25    use super::*;
26    use std::mem;
27    use crate::instructions_data::constructors::withdraw_token::WithdrawTokenParams;
28    use crate::instructions_data::dvl_instruction_data::DvlInstruction;
29
30    pub const INSTR_WITHDRAW_TOKEN_CMD_OFFSET: usize = 0;
31    pub const INSTR_WITHDRAW_TOKEN_VERSION_OFFSET: usize = 1;
32    pub const INSTR_WITHDRAW_TOKEN_RESERVED_OFFSET: usize = 2;
33    pub const INSTR_WITHDRAW_TOKEN_MINT_ID_OFFSET: usize = 4;
34    pub const INSTR_WITHDRAW_AMOUNT_ID_OFFSET: usize = 8;
35
36    #[test]
37    fn test_instruction_data_offsets() {
38        let withdraw_token_params = WithdrawTokenParams {
39            mint_id: 1,
40            amount: 2,
41        };
42
43        let data = DvlInstruction::new::<InstructionWithdrawToken>(withdraw_token_params).unwrap();
44
45        let base_ptr = &*data as *const _ as usize;
46
47        assert_eq!(&data.cmd as *const _ as usize - base_ptr, INSTR_WITHDRAW_TOKEN_CMD_OFFSET);
48        assert_eq!(&data.version as *const _ as usize - base_ptr, INSTR_WITHDRAW_TOKEN_VERSION_OFFSET);
49        assert_eq!(&data.reserved as *const _ as usize - base_ptr, INSTR_WITHDRAW_TOKEN_RESERVED_OFFSET);
50        assert_eq!(&data.mint_id as *const _ as usize - base_ptr, INSTR_WITHDRAW_TOKEN_MINT_ID_OFFSET);
51        assert_eq!(&data.amount as *const _ as usize - base_ptr, INSTR_WITHDRAW_AMOUNT_ID_OFFSET);
52
53        assert_eq!(mem::size_of::<InstructionWithdrawToken>(), INSTRUCTION_WITHDRAW_TOKEN_SIZE);
54    }
55}