devol_accounts_kit/instructions_data/
option_trade_debug.rs1use crate::constants::BUCKETS_COUNT;
2use crate::instructions_data::dvl_deserializable_instruction::DvlDeserializableInstruction;
3use crate::instructions_data::option_trade::{INSTRUCTION_OPTION_TRADE_DATA_SIZE, INSTRUCTION_OPTION_TRADE_VERSION, InstructionOptionTrade};
4use crate::utils::option_trade_basket_data::OptionTradeBasketData;
5
6pub const INSTRUCTION_OPTION_TRADE_DEBUG_DATA_SIZE: usize = INSTRUCTION_OPTION_TRADE_DATA_SIZE + 16;
7
8#[repr(C)]
9pub struct InstructionOptionTradeDebug {
10 pub option_trade: InstructionOptionTrade,
11 pub time_to_expiration: i64,
12 pub underlying_price: i64,
13}
14
15pub struct OptionTradeDebugParams<'a> {
16 pub trade_qty: [i32; BUCKETS_COUNT],
17 pub max_cost: Option<i64>,
18 pub basket: Option<&'a [OptionTradeBasketData]>,
19 pub time_to_expiration: i64,
20 pub underlying_price: i64,
21}
22
23impl<'a> DvlDeserializableInstruction<'a> for InstructionOptionTradeDebug {
24 #[inline(always)]
25 fn expected_size() -> usize {INSTRUCTION_OPTION_TRADE_DEBUG_DATA_SIZE}
26 #[inline(always)]
27 fn expected_version() -> u8 {INSTRUCTION_OPTION_TRADE_VERSION} }
29
30#[cfg(not(feature = "on-chain"))]
31#[cfg(test)]
32mod tests {
33 use super::*;
34 use std::mem;
35 use crate::instructions_data::common::instruction_size_params::INSTRUCTION_SIZE_LIMIT;
36 use crate::instructions_data::option_trade::{INSTRUCTION_OPTION_TRADE_ACCOUNTS_SIZE};
37
38 pub const INSTR_OPTION_TRADE_DEBUG_OPTION_TRADE_OFFSET: usize = 0;
39 pub const INSTR_OPTION_TRADE_DEBUG_TIME_TO_EXPIRATION_OFFSET: usize = INSTRUCTION_OPTION_TRADE_DATA_SIZE;
40 pub const INSTR_OPTION_TRADE_DEBUG_UNDERLYING_PRICE_OFFSET: usize = INSTRUCTION_OPTION_TRADE_DATA_SIZE + 8;
41
42 #[test]
43 fn test_instruction_data_offsets() {
44 let data = InstructionOptionTradeDebug::default();
45 let base_ptr = &data as *const _ as usize;
46
47 assert_eq!(&data.option_trade as *const _ as usize - base_ptr, INSTR_OPTION_TRADE_DEBUG_OPTION_TRADE_OFFSET);
48 assert_eq!(&data.time_to_expiration as *const _ as usize - base_ptr, INSTR_OPTION_TRADE_DEBUG_TIME_TO_EXPIRATION_OFFSET);
49 assert_eq!(&data.underlying_price as *const _ as usize - base_ptr, INSTR_OPTION_TRADE_DEBUG_UNDERLYING_PRICE_OFFSET);
50
51 let structure_size = mem::size_of::<InstructionOptionTradeDebug>();
52 assert_eq!(structure_size, INSTRUCTION_OPTION_TRADE_DEBUG_DATA_SIZE);
53 assert_eq!(structure_size + INSTRUCTION_OPTION_TRADE_ACCOUNTS_SIZE <= INSTRUCTION_SIZE_LIMIT, true);
54 }
55}