gmsol_model/params/
position.rs

1use typed_builder::TypedBuilder;
2
3/// Basic Position Parameters.
4#[derive(Debug, Clone, Copy, TypedBuilder)]
5pub struct PositionParams<T> {
6    min_position_size_usd: T,
7    min_collateral_value: T,
8    min_collateral_factor: T,
9    #[builder(default)]
10    min_collateral_factor_for_liquidation: Option<T>,
11    max_positive_position_impact_factor: T,
12    max_negative_position_impact_factor: T,
13    max_position_impact_factor_for_liquidations: T,
14}
15
16impl<T> PositionParams<T> {
17    /// Create a new [`PositionParams`].
18    pub fn new(
19        min_position_size_usd: T,
20        min_collateral_value: T,
21        min_collateral_factor: T,
22        max_positive_position_impact_factor: T,
23        max_negative_position_impact_factor: T,
24        max_position_impact_factor_for_liquidations: T,
25    ) -> Self {
26        Self {
27            min_position_size_usd,
28            min_collateral_value,
29            min_collateral_factor,
30            min_collateral_factor_for_liquidation: None,
31            max_positive_position_impact_factor,
32            max_negative_position_impact_factor,
33            max_position_impact_factor_for_liquidations,
34        }
35    }
36
37    /// Get min position size usd.
38    pub fn min_position_size_usd(&self) -> &T {
39        &self.min_position_size_usd
40    }
41
42    /// Get min collateral value.
43    pub fn min_collateral_value(&self) -> &T {
44        &self.min_collateral_value
45    }
46
47    /// Get min collateral factor.
48    pub fn min_collateral_factor(&self) -> &T {
49        &self.min_collateral_factor
50    }
51
52    /// Get min collateral factor for liquidation.
53    pub fn min_collateral_factor_for_liquidation(&self) -> &T {
54        self.min_collateral_factor_for_liquidation
55            .as_ref()
56            .unwrap_or_else(|| self.min_collateral_factor())
57    }
58
59    /// Get max positive position impact factor.
60    pub fn max_positive_position_impact_factor(&self) -> &T {
61        &self.max_positive_position_impact_factor
62    }
63
64    /// Get max negative position impact factor.
65    pub fn max_negative_position_impact_factor(&self) -> &T {
66        &self.max_negative_position_impact_factor
67    }
68
69    /// Get max position impact factor for liquidations.
70    pub fn max_position_impact_factor_for_liquidations(&self) -> &T {
71        &self.max_position_impact_factor_for_liquidations
72    }
73}
74
75/// Position Impact Distribution Parameters.
76#[derive(Debug, Clone, Copy, TypedBuilder)]
77pub struct PositionImpactDistributionParams<T> {
78    distribute_factor: T,
79    min_position_impact_pool_amount: T,
80}
81
82impl<T> PositionImpactDistributionParams<T> {
83    /// Get distribution rate factor.
84    pub fn distribute_factor(&self) -> &T {
85        &self.distribute_factor
86    }
87
88    /// Get min position impact pool amount.
89    pub fn min_position_impact_pool_amount(&self) -> &T {
90        &self.min_position_impact_pool_amount
91    }
92}