gmsol_model/params/
position.rs1use typed_builder::TypedBuilder;
2
3#[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 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 pub fn min_position_size_usd(&self) -> &T {
39 &self.min_position_size_usd
40 }
41
42 pub fn min_collateral_value(&self) -> &T {
44 &self.min_collateral_value
45 }
46
47 pub fn min_collateral_factor(&self) -> &T {
49 &self.min_collateral_factor
50 }
51
52 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 pub fn max_positive_position_impact_factor(&self) -> &T {
61 &self.max_positive_position_impact_factor
62 }
63
64 pub fn max_negative_position_impact_factor(&self) -> &T {
66 &self.max_negative_position_impact_factor
67 }
68
69 pub fn max_position_impact_factor_for_liquidations(&self) -> &T {
71 &self.max_position_impact_factor_for_liquidations
72 }
73}
74
75#[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 pub fn distribute_factor(&self) -> &T {
85 &self.distribute_factor
86 }
87
88 pub fn min_position_impact_pool_amount(&self) -> &T {
90 &self.min_position_impact_pool_amount
91 }
92}