1use rust_decimal::RoundingStrategy;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum FractionStrategy {
5 Plain,
9 Simplify,
11}
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq)]
14pub enum LookupVariant {
15 None,
17 Basic,
19 Extended,
21}
22
23#[derive(Debug, Clone, Copy)]
25pub struct ConversionConfig {
26 pub lookup_tables_variant: LookupVariant,
29 pub fraction_strategy: FractionStrategy,
31 pub rounding_strategy: RoundingStrategy,
33}
34
35impl Default for ConversionConfig {
36 fn default() -> Self {
42 DEFAULT_CONVERSION_CONFIG
43 }
44}
45
46static DEFAULT_CONVERSION_CONFIG: ConversionConfig = ConversionConfig {
47 lookup_tables_variant: LookupVariant::Basic,
48 fraction_strategy: FractionStrategy::Simplify,
49 rounding_strategy: RoundingStrategy::MidpointAwayFromZero, };
51
52impl ConversionConfig {
53 pub fn no_lookup(mut self) -> Self {
54 self.lookup_tables_variant = LookupVariant::None;
55 self
56 }
57
58 pub fn extended_lookup(mut self) -> Self {
59 self.lookup_tables_variant = LookupVariant::Extended;
60 self
61 }
62
63 pub fn plain_fraction_strategy(mut self) -> Self {
64 self.fraction_strategy = FractionStrategy::Plain;
65 self
66 }
67
68 pub fn fraction_strategy(mut self, strategy: FractionStrategy) -> Self {
69 self.fraction_strategy = strategy;
70 self
71 }
72
73 pub fn rounding_strategy(mut self, strategy: RoundingStrategy) -> Self {
74 self.rounding_strategy = strategy;
75 self
76 }
77}