Money

Struct Money 

Source
pub struct Money {
    pub currency_code: String,
    pub units: i64,
    pub nanos: i32,
}
Available on crate feature money only.
Expand description

Represents an amount of money with its currency type.

Fields§

§currency_code: String

The three-letter currency code defined in ISO 4217.

§units: i64

The whole units of the amount. For example if currencyCode is "USD", then 1 unit is one US dollar.

§nanos: i32

Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If units is positive, nanos must be positive or zero. If units is zero, nanos can be positive, zero, or negative. If units is negative, nanos must be negative or zero. For example $-1.75 is represented as units=-1 and nanos=-750,000,000.

Implementations§

Source§

impl Money

Source

pub fn to_formatted_string(&self, symbol: &str, decimal_places: u32) -> String

Normalizes the Money amount and returns a string containing the currency symbol and the monetary amount rounded by the specified decimal places.

Source

pub fn normalize(self) -> Result<Self, MoneyError>

Normalizes units and nanos. Fails in case of overflow.

Source

pub fn new( currency_code: String, units: i64, nanos: i32, ) -> Result<Self, MoneyError>

Creates a new instance, if the normalization does not return errors like Overflow or Underflow.

Source

pub fn to_rounded_imprecise_f64( &self, decimal_places: u32, ) -> Result<f64, MoneyError>

Converts the Money amount into a decimal (f64) representation, rounded to the specified number of decimal places.

decimal_places determines the precision of the rounding. For example:

  • 0 rounds to the nearest whole unit.
  • 2 rounds to two decimal places (e.g., for cents).

WARNING: The usage of f64 introduces floating-point precision issues. Do not use it for critical financial calculations.

Source

pub fn as_imprecise_f64(&self) -> f64

Converts the Money amount into a decimal (f64) representation.

WARNING: The usage of f64 introduces floating-point precision issues. Do not use it for critical financial calculations.

Source

pub fn from_imprecise_f64( currency_code: String, amount: f64, ) -> Result<Self, MoneyError>

Creates a new Money instance with the given currency code and decimal amount.

This is a convenience constructor that handles splitting a decimal value into units and nanos.

WARNING: The usage of f64 introduces floating-point precision issues. Do not use it for critical financial calculations.

Source

pub fn try_add(&self, other: &Self) -> Result<Self, MoneyError>

Attempts to add another Money amount to this one, returning a new Money instance. Returns an error if currencies mismatch or if addition causes an overflow/underflow.

Source

pub fn try_add_assign(&mut self, other: &Self) -> Result<(), MoneyError>

Attempts to add another Money amount to this one in place. Returns an error if currencies mismatch or if addition causes an overflow/underflow.

Source

pub fn try_sub(&self, other: &Self) -> Result<Self, MoneyError>

Attempts to subtract another Money amount from this one, returning a new Money instance. Returns an error if currencies mismatch or if subtraction causes an overflow/underflow.

Source

pub fn try_sub_assign(&mut self, other: &Self) -> Result<(), MoneyError>

Attempts to subtract another Money amount from this one in place. Returns an error if currencies mismatch or if subtraction causes an overflow/underflow.

Source

pub fn try_mul_i64(&self, rhs: i64) -> Result<Self, MoneyError>

Attempts to multiply this Money amount by an integer scalar, returning a new Money instance. Returns an error if multiplication causes an overflow/underflow.

Source

pub fn try_mul_f64(&self, rhs: f64) -> Result<Self, MoneyError>

Attempts to multiply this Money amount by a float scalar, returning a new Money instance. Returns an error if the result is non-finite or causes an internal conversion error. WARNING: The usage of f64 introduces floating-point precision issues. Do not use it for critical financial calculations.

Source

pub fn try_div_i64(&self, rhs: i64) -> Result<Self, MoneyError>

Attempts to divide this Money amount by an integer scalar, returning a new Money instance. Returns an error if the divisor is zero, or if division causes an overflow/underflow.

Source

pub fn try_div_f64(&self, rhs: f64) -> Result<Self, MoneyError>

Attempts to divide this Money amount by a float scalar, returning a new Money instance. Returns an error if the divisor is zero, non-finite, or if division causes an internal conversion error. WARNING: The usage of f64 introduces floating-point precision issues. Do not use it for critical financial calculations.

Source

pub fn try_neg(&self) -> Result<Self, MoneyError>

Attempts to negate this Money amount, returning a new Money instance. Returns an error if negation causes an overflow/underflow.

Source

pub fn is_currency(&self, code: &str) -> bool

Checks if the money’s currency code matches the given code. The code should be a three-letter ISO 4217 currency code (e.g., “USD”, “EUR”).

Source

pub fn is_usd(&self) -> bool

Checks if the money’s currency is United States Dollar (USD).

Source

pub fn is_eur(&self) -> bool

Checks if the money’s currency is Euro (EUR).

Source

pub fn is_gbp(&self) -> bool

Checks if the money’s currency is British Pound Sterling (GBP).

Source

pub fn is_jpy(&self) -> bool

Checks if the money’s currency is Japanese Yen (JPY).

Source

pub fn is_cad(&self) -> bool

Checks if the money’s currency is Canadian Dollar (CAD).

Source

pub fn is_aud(&self) -> bool

Checks if the money’s currency is Australian Dollar (AUD).

Source

pub fn is_positive(&self) -> bool

Checks if the money amount is strictly positive (greater than zero).

Source

pub fn is_negative(&self) -> bool

Checks if the money amount is strictly negative (less than zero).

Source

pub fn is_zero(&self) -> bool

Checks if the money amount is exactly zero.

Trait Implementations§

Source§

impl Clone for Money

Source§

fn clone(&self) -> Money

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Money

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Money

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Money

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<Money> for Value

Available on crate feature cel only.
Source§

fn from(value: Money) -> Self

Converts to this type from the input type.
Source§

impl Hash for Money

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Message for Money

Source§

fn encoded_len(&self) -> usize

Returns the encoded length of the message without a length delimiter.
Source§

fn clear(&mut self)

Clears the message, resetting all fields to their default.
Source§

fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message to a buffer. Read more
Source§

fn encode_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message to a newly allocated buffer.
Source§

fn encode_length_delimited( &self, buf: &mut impl BufMut, ) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message with a length-delimiter to a buffer. Read more
Source§

fn encode_length_delimited_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message with a length-delimiter to a newly allocated buffer.
Source§

fn decode(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes an instance of the message from a buffer. Read more
Source§

fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes a length-delimited instance of the message from the buffer.
Source§

fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes an instance of the message from a buffer, and merges it into self. Read more
Source§

fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes a length-delimited instance of the message from buffer, and merges it into self.
Source§

impl PartialEq for Money

Source§

fn eq(&self, other: &Money) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Money

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for Money

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for Money

Source§

impl StructuralPartialEq for Money

Auto Trait Implementations§

§

impl Freeze for Money

§

impl RefUnwindSafe for Money

§

impl Send for Money

§

impl Sync for Money

§

impl Unpin for Money

§

impl UnwindSafe for Money

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AnyExt for T
where T: Any + ?Sized,

Source§

fn downcast_ref<T>(this: &Self) -> Option<&T>
where T: Any,

Attempts to downcast this to T behind reference
Source§

fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>
where T: Any,

Attempts to downcast this to T behind mutable reference
Source§

fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>
where T: Any,

Attempts to downcast this to T behind Rc pointer
Source§

fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
where T: Any,

Attempts to downcast this to T behind Arc pointer
Source§

fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>
where T: Any,

Attempts to downcast this to T behind Box pointer
Source§

fn downcast_move<T>(this: Self) -> Option<T>
where T: Any, Self: Sized,

Attempts to downcast owned Self to T, useful only in generic context as a workaround for specialization
Source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, X> CoerceTo<T> for X
where T: CoerceFrom<X> + ?Sized,

Source§

fn coerce_rc_to(self: Rc<X>) -> Rc<T>

Source§

fn coerce_box_to(self: Box<X>) -> Box<T>

Source§

fn coerce_ref_to(&self) -> &T

Source§

fn coerce_mut_to(&mut self) -> &mut T

Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<T> TryIntoValue for T
where T: Serialize,

Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,