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