Skip to content

Commit 3e1eb48

Browse files
authored
Merge pull request #30 from drift-labs/ahzam/remove-align-16
remove align(16) from some types
2 parents 5bab077 + 09ce892 commit 3e1eb48

File tree

3 files changed

+45
-10
lines changed

3 files changed

+45
-10
lines changed

src/exports.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use solana_sdk::{
3333
};
3434

3535
use crate::{
36-
margin::{IncrementalMarginCalculation, SimplifiedMarginCalculation},
36+
margin::IncrementalMarginCalculation,
3737
types::{
3838
compat::{self},
3939
AccountsList, FfiResult, IsolatedMarginCalculation, MMOraclePriceData, MarginCalculation,
@@ -547,15 +547,15 @@ pub extern "C" fn margin_calculate_simplified_margin_requirement(
547547
market_state: &MarketState,
548548
margin_type: MarginRequirementType,
549549
margin_buffer: u32,
550-
) -> FfiResult<SimplifiedMarginCalculation> {
550+
) -> FfiResult<crate::types::SimplifiedMarginCalculation> {
551551
let result = crate::margin::calculate_simplified_margin_requirement(
552552
user,
553553
market_state,
554554
margin_type,
555555
margin_buffer,
556556
);
557557

558-
to_ffi_result(result)
558+
to_ffi_result(result.map(Into::into))
559559
}
560560

561561
#[no_mangle]

src/margin.rs

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@ use drift_program::{
2222
// Reuses existing type definitions while removing Solana-specific abstractions
2323
use crate::types::MarketState;
2424

25-
#[repr(C, align(16))]
2625
#[derive(Clone, Copy, Debug, Default)]
27-
pub struct IsolatedMarginCalculation {
28-
pub market_index: u16,
26+
pub(crate) struct IsolatedMarginCalculation {
2927
pub margin_requirement: u128,
3028
pub total_collateral: i128,
3129
pub total_collateral_buffer: i128,
3230
pub margin_requirement_plus_buffer: u128,
31+
pub market_index: u16,
3332
}
3433

3534
impl IsolatedMarginCalculation {
@@ -57,10 +56,34 @@ impl IsolatedMarginCalculation {
5756
}
5857
}
5958

59+
impl Into<crate::types::SimplifiedMarginCalculation> for SimplifiedMarginCalculation {
60+
fn into(self) -> crate::types::SimplifiedMarginCalculation {
61+
let mut isolated_margin_calculations =
62+
[crate::types::IsolatedMarginCalculation::default(); 8];
63+
for (idx, p) in self.isolated_margin_calculations.iter().enumerate() {
64+
isolated_margin_calculations[idx] = crate::types::IsolatedMarginCalculation {
65+
margin_requirement: p.margin_requirement.into(),
66+
total_collateral: p.total_collateral.into(),
67+
total_collateral_buffer: p.total_collateral_buffer.into(),
68+
margin_requirement_plus_buffer: p.margin_requirement_plus_buffer.into(),
69+
market_index: p.market_index,
70+
};
71+
}
72+
crate::types::SimplifiedMarginCalculation {
73+
total_collateral: self.total_collateral.into(),
74+
total_collateral_buffer: self.total_collateral_buffer.into(),
75+
margin_requirement: self.margin_requirement.into(),
76+
margin_requirement_plus_buffer: self.margin_requirement_plus_buffer.into(),
77+
isolated_margin_calculations,
78+
with_perp_isolated_liability: self.with_perp_isolated_liability,
79+
with_spot_isolated_liability: self.with_spot_isolated_liability,
80+
}
81+
}
82+
}
83+
6084
// Core margin calculation result
61-
#[repr(C, align(16))]
6285
#[derive(Debug, Clone)]
63-
pub struct SimplifiedMarginCalculation {
86+
pub(crate) struct SimplifiedMarginCalculation {
6487
pub total_collateral: i128,
6588
pub total_collateral_buffer: i128,
6689
pub margin_requirement: u128,
@@ -726,7 +749,7 @@ impl IncrementalMarginCalculation {
726749
margin_requirement: self.margin_requirement,
727750
total_collateral_buffer: self.total_collateral_buffer,
728751
margin_requirement_plus_buffer: self.margin_requirement_plus_buffer,
729-
isolated_margin_calculations: [IsolatedMarginCalculation::default(); 8],
752+
isolated_margin_calculations: [Default::default(); 8],
730753
with_perp_isolated_liability: false,
731754
with_spot_isolated_liability: false,
732755
}

src/types.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,26 @@ pub struct MarginCalculation {
101101
pub isolated_margin_calculations: [IsolatedMarginCalculation; 8],
102102
}
103103

104+
#[repr(C)]
105+
#[derive(Debug, Clone)]
106+
pub struct SimplifiedMarginCalculation {
107+
pub total_collateral: compat::i128,
108+
pub total_collateral_buffer: compat::i128,
109+
pub margin_requirement: compat::u128,
110+
pub margin_requirement_plus_buffer: compat::u128,
111+
pub isolated_margin_calculations: [IsolatedMarginCalculation; 8],
112+
pub with_perp_isolated_liability: bool,
113+
pub with_spot_isolated_liability: bool,
114+
}
115+
104116
#[repr(C)]
105117
#[derive(Copy, Clone, Debug, Default)]
106118
pub struct IsolatedMarginCalculation {
107-
pub market_index: u16,
108119
pub margin_requirement: compat::u128,
109120
pub total_collateral: compat::i128,
110121
pub total_collateral_buffer: compat::i128,
111122
pub margin_requirement_plus_buffer: compat::u128,
123+
pub market_index: u16,
112124
}
113125

114126
impl MarginCalculation {

0 commit comments

Comments
 (0)