use rust_decimal::RoundingStrategy;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FractionStrategy {
Plain,
Simplify,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LookupVariant {
None,
Basic,
Extended,
}
#[derive(Debug, Clone, Copy)]
pub struct ConversionConfig {
pub lookup_tables_variant: LookupVariant,
pub fraction_strategy: FractionStrategy,
pub rounding_strategy: RoundingStrategy,
}
impl Default for ConversionConfig {
fn default() -> Self {
DEFAULT_CONVERSION_CONFIG
}
}
static DEFAULT_CONVERSION_CONFIG: ConversionConfig = ConversionConfig {
lookup_tables_variant: LookupVariant::Basic,
fraction_strategy: FractionStrategy::Simplify,
rounding_strategy: RoundingStrategy::MidpointAwayFromZero, };
impl ConversionConfig {
pub fn no_lookup(mut self) -> Self {
self.lookup_tables_variant = LookupVariant::None;
self
}
pub fn extended_lookup(mut self) -> Self {
self.lookup_tables_variant = LookupVariant::Extended;
self
}
pub fn plain_fraction_strategy(mut self) -> Self {
self.fraction_strategy = FractionStrategy::Plain;
self
}
pub fn fraction_strategy(mut self, strategy: FractionStrategy) -> Self {
self.fraction_strategy = strategy;
self
}
pub fn rounding_strategy(mut self, strategy: RoundingStrategy) -> Self {
self.rounding_strategy = strategy;
self
}
}