//! Decimal helpers shared by the parser and the value layer.
use std::str::FromStr;
use rust_decimal::Decimal;
/// A trait to extend the Decimal type with additional functionality.
pub trait DecimalExt {
/// Converts a string to a Decimal, normalizing it in the process.
///
/// This method is a convenience wrapper around
/// `rust_decimal::Decimal::from_str` which can parse a string into a
/// Decimal and normalize it. If the value has higher precision than the
/// Decimal type can handle, it will be rounded to the
/// nearest representable value.
fn from_str_normalized(s: &str) -> Result<Self, rust_decimal::Error>
where
Self: Sized;
}
impl DecimalExt for Decimal {
fn from_str_normalized(s: &str) -> Result<Decimal, rust_decimal::Error> {
#[allow(clippy::disallowed_methods)]
Ok(Decimal::from_str(s)?.normalize())
}
}