pub struct ManagedDecimal<M: ManagedTypeApi, D: Decimals> { /* private fields */ }Expand description
Fixed-point decimal numbers that accept either a constant or variable number of decimals.
Negative numbers are not allowed. It is especially designed for denominated token amounts.
If negative numbers are needed, use ManagedDecimalSigned instead.
Implementations§
Source§impl<M: ManagedTypeApi, D: Decimals> ManagedDecimal<M, D>
impl<M: ManagedTypeApi, D: Decimals> ManagedDecimal<M, D>
Sourcepub fn trunc(&self) -> BigUint<M>
pub fn trunc(&self) -> BigUint<M>
Returns the integer part (floor toward zero) of the decimal value.
Divides the raw fixed-point integer by the scaling factor, discarding the fractional part.
For example, 1.75 with 2 decimals returns 1.
Sourcepub fn as_raw_units(&self) -> &BigUint<M>
pub fn as_raw_units(&self) -> &BigUint<M>
Returns a reference to the underlying raw fixed-point integer.
The value is stored as real_value * 10^decimals. For example,
a ManagedDecimal representing 1.5 with 2 decimals has a raw value of 150.
Sourcepub fn into_raw_units(&self) -> &BigUint<M>
👎Deprecated since 0.66.0: Use as_raw_units to get a reference to the raw value, or into_raw_parts to consume the decimal and get the raw value.
pub fn into_raw_units(&self) -> &BigUint<M>
Use as_raw_units to get a reference to the raw value, or into_raw_parts to consume the decimal and get the raw value.
Was incorrectly named into_raw_units in versions prior to 0.66.0;
renamed to as_raw_units to clarify that it returns a reference and does not consume the decimal.
Sourcepub fn into_raw_parts(self) -> (BigUint<M>, D)
pub fn into_raw_parts(self) -> (BigUint<M>, D)
Consumes the decimal and returns the underlying raw fixed-point integer together with the decimals specification.
The value is stored as real_value * 10^decimals. For example,
a ManagedDecimal representing 1.5 with 2 decimals has a raw value of 150.
This is the destructuring counterpart of from_raw_units.
Sourcepub fn from_raw_units(data: BigUint<M>, decimals: D) -> Self
pub fn from_raw_units(data: BigUint<M>, decimals: D) -> Self
Creates a ManagedDecimal from a raw fixed-point integer and a decimals specification.
The caller is responsible for ensuring data is already scaled by 10^decimals.
For constructing from a human-readable integer value, use the From trait instead.
Sourcepub fn one(decimals: D) -> Self
pub fn one(decimals: D) -> Self
Returns the multiplicative identity 1 at the given decimals precision.
The raw value is 10^decimals (the scaling factor), so that
self.trunc() returns 1 and all arithmetic treats it as unity.
Sourcepub fn scaling_factor(&self) -> ManagedRef<'static, M, BigUint<M>>
pub fn scaling_factor(&self) -> ManagedRef<'static, M, BigUint<M>>
Returns the scaling factor 10^decimals as a static reference.
Sourcepub fn rescale<T: Decimals>(&self, scale_to: T) -> ManagedDecimal<M, T>where
M: ManagedTypeApi,
pub fn rescale<T: Decimals>(&self, scale_to: T) -> ManagedDecimal<M, T>where
M: ManagedTypeApi,
Converts this decimal to a new scale, adjusting the raw value accordingly.
Upscaling adds precision (appends trailing zeros to the raw integer); downscaling truncates the least-significant digits.
Sourcepub fn into_signed(self) -> ManagedDecimalSigned<M, D>
pub fn into_signed(self) -> ManagedDecimalSigned<M, D>
Converts this unsigned decimal into a signed ManagedDecimalSigned with the same scale and value.
Source§impl<M: ManagedTypeApi, DECIMALS: Unsigned> ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> ManagedDecimal<M, ConstDecimals<DECIMALS>>
Sourcepub fn const_decimals_from_raw(data: BigUint<M>) -> Self
pub fn const_decimals_from_raw(data: BigUint<M>) -> Self
Creates a ManagedDecimal with a compile-time fixed number of decimals from a raw integer.
The caller is responsible for ensuring data is already scaled by 10^DECIMALS.
Sourcepub fn into_var_decimals(self) -> ManagedDecimal<M, NumDecimals>
pub fn into_var_decimals(self) -> ManagedDecimal<M, NumDecimals>
Converts from constant (compile-time) number of decimals to a variable number of decimals.
Source§impl<M: ManagedTypeApi, D: Decimals> ManagedDecimal<M, D>
impl<M: ManagedTypeApi, D: Decimals> ManagedDecimal<M, D>
Sourcepub fn nth_root(&self, k: u32) -> Self
pub fn nth_root(&self, k: u32) -> Self
Integer part of the k-th root, preserving the decimal scale.
Internally pre-scales the raw data by scaling_factor^(k-1) so that after
taking the integer root the decimal point lands in the correct position:
self.data = v * 10^d
→ scaled = self.data * (10^d)^(k-1) = v * 10^(d*k)
→ root = floor(scaled^(1/k)) = floor(v^(1/k) * 10^d)Returns 0 (with the same scale) when self is zero.
§Panics
Panics if k is zero.
Sourcepub fn exp_approx(&self) -> ManagedDecimal<M, D>
pub fn exp_approx(&self) -> ManagedDecimal<M, D>
Approximates e^self using a 5th-order Taylor approximation.
Treats self as the exponent x and computes:
e^x ≈ 1 + x + x²/2! + x³/3! + x⁴/4! + x⁵/5!The result has the same precision as self; all intermediate steps use
[mul_half_up] / [div_half_up] to prevent rounding errors from
accumulating toward zero.
Accurate for small x (i.e. when x ≪ 1). Error is O(x⁶/720).
Sourcepub fn compounded_interest_factor<Precision: Decimals>(
&self,
expiration: u64,
precision: Precision,
) -> ManagedDecimal<M, Precision>
pub fn compounded_interest_factor<Precision: Decimals>( &self, expiration: u64, precision: Precision, ) -> ManagedDecimal<M, Precision>
Computes the continuous-compounding growth factor e^(self × expiration).
Delegates to [exp_approx] after computing x = rate * expiration;
uses a 5-term Taylor series internally:
e^(rate * t) ≈ 1 + x + x²/2! + x³/3! + x⁴/4! + x⁵/5!, where x = rate * tMultiply a principal amount by the returned factor to apply interest.
Returns 1 (at precision) when expiration == 0.
§Credits
Original implementation by @mihaieremia.
Source§impl<M: ManagedTypeApi, D1: Decimals> ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals> ManagedDecimal<M, D1>
Sourcepub fn mul_half_up<D2: Decimals, DResult: Decimals>(
&self,
other: &ManagedDecimal<M, D2>,
precision: DResult,
) -> ManagedDecimal<M, DResult>
pub fn mul_half_up<D2: Decimals, DResult: Decimals>( &self, other: &ManagedDecimal<M, D2>, precision: DResult, ) -> ManagedDecimal<M, DResult>
Multiplies two decimals with half-up rounding to a target precision.
Both operands are first rescaled to precision. The rescaled raw values
are multiplied, producing a result with 2 * precision implied decimal
places. That intermediate value is then rounded back to precision using
the standard pre-bias trick:
rounded = (product + scale / 2) / scaleAdding scale / 2 before the integer division means that any remainder
≥ half the scale (i.e. the fractional part ≥ 0.5) causes the quotient
to increment by one — equivalent to round-half-up.
§Credits
Original implementation by @mihaieremia.
Sourcepub fn div_half_up<D2: Decimals, DResult: Decimals>(
&self,
other: &ManagedDecimal<M, D2>,
precision: DResult,
) -> ManagedDecimal<M, DResult>
pub fn div_half_up<D2: Decimals, DResult: Decimals>( &self, other: &ManagedDecimal<M, D2>, precision: DResult, ) -> ManagedDecimal<M, DResult>
Divides two decimals with half-up rounding to a target precision.
Both operands are rescaled to precision. The numerator is then
multiplied by scale so the division produces a result with the correct
number of decimal places. The quotient is rounded using the pre-bias
trick:
rounded = (numerator * scale + denominator / 2) / denominatorAdding denominator / 2 means that once the true quotient’s remainder
reaches half the denominator (i.e. fractional part ≥ 0.5), integer
division increments the result — equivalent to round-half-up.
§Credits
Original implementation by @mihaieremia.
Source§impl<M: ManagedTypeApi, D: Decimals> ManagedDecimal<M, D>
impl<M: ManagedTypeApi, D: Decimals> ManagedDecimal<M, D>
Sourcepub fn ln(&self) -> Option<ManagedDecimalSigned<M, LnDecimals>>
pub fn ln(&self) -> Option<ManagedDecimalSigned<M, LnDecimals>>
Natural logarithm of a number.
Returns None for 0.
Even though 9 decimals are returned, only around 6 decimals are actually useful.
Sourcepub fn log2(&self) -> Option<ManagedDecimalSigned<M, LnDecimals>>
pub fn log2(&self) -> Option<ManagedDecimalSigned<M, LnDecimals>>
Base 2 logarithm of a number.
Returns None for 0.
Even though 9 decimals are returned, only around 6 decimals are actually useful.
Source§impl<M: ManagedTypeApi, D1: Decimals> ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals> ManagedDecimal<M, D1>
pub fn mul_with_precision<D2: Decimals, T: Decimals>( self, other: ManagedDecimal<M, D2>, precision: T, ) -> ManagedDecimal<M, T>
Trait Implementations§
Source§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Add<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Add<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
+ operator.Source§fn add(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
fn add(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
+ operation. Read moreSource§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Add<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Add<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
+ operator.Source§fn add(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
fn add(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
+ operation. Read moreSource§impl<M: ManagedTypeApi, DECIMALS: Unsigned> Add for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> Add for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§type Output = ManagedDecimal<M, ConstDecimals<DECIMALS>>
type Output = ManagedDecimal<M, ConstDecimals<DECIMALS>>
+ operator.Source§fn add(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
fn add(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
+ operation. Read moreSource§impl<M: ManagedTypeApi> Add for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> Add for ManagedDecimal<M, NumDecimals>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
+ operator.Source§fn add(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
fn add(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
+ operation. Read moreSource§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> AddAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> AddAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn add_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
fn add_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
+= operation. Read moreSource§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> AddAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> AddAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn add_assign(&mut self, rhs: ManagedDecimal<M, D2>)
fn add_assign(&mut self, rhs: ManagedDecimal<M, D2>)
+= operation. Read moreSource§impl<M: Clone + ManagedTypeApi, D: Clone + Decimals> Clone for ManagedDecimal<M, D>
impl<M: Clone + ManagedTypeApi, D: Clone + Decimals> Clone for ManagedDecimal<M, D>
Source§fn clone(&self) -> ManagedDecimal<M, D>
fn clone(&self) -> ManagedDecimal<M, D>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<M: ManagedTypeApi, D: Decimals> Debug for ManagedDecimal<M, D>
impl<M: ManagedTypeApi, D: Decimals> Debug for ManagedDecimal<M, D>
Source§impl<M: ManagedTypeApi, D: Decimals> Display for ManagedDecimal<M, D>
impl<M: ManagedTypeApi, D: Decimals> Display for ManagedDecimal<M, D>
Source§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Div<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Div<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
/ operator.Source§fn div(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
fn div(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
/ operation. Read moreSource§impl<M: ManagedTypeApi, D1, D2: Decimals> Div<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1, D2: Decimals> Div<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Div<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Div<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
/ operator.Source§fn div(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
fn div(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
/ operation. Read moreSource§impl<M: ManagedTypeApi, D: Decimals> Div<usize> for ManagedDecimal<M, D>
impl<M: ManagedTypeApi, D: Decimals> Div<usize> for ManagedDecimal<M, D>
Source§type Output = ManagedDecimal<M, D>
type Output = ManagedDecimal<M, D>
/ operator.Source§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> DivAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> DivAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn div_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
fn div_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
/= operation. Read moreSource§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> DivAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> DivAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn div_assign(&mut self, rhs: ManagedDecimal<M, D2>)
fn div_assign(&mut self, rhs: ManagedDecimal<M, D2>)
/= operation. Read moreSource§impl<M: ManagedTypeApi, DECIMALS: Unsigned> From<BigUint<M>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> From<BigUint<M>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§impl<M: ManagedTypeApi, DECIMALS: Unsigned> From<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> From<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
Source§fn from(value: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self
fn from(value: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self
Source§impl<M: ManagedTypeApi, DECIMALS: Unsigned> ManagedVecItem for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> ManagedVecItem for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§const SKIPS_RESERIALIZATION: bool = false
const SKIPS_RESERIALIZATION: bool = false
u32).Source§type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UTerm, B1>, B0>, B0>>
type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UTerm, B1>, B0>, B0>>
Source§type Ref<'a> = Ref<'a, ManagedDecimal<M, ConstDecimals<DECIMALS>>>
type Ref<'a> = Ref<'a, ManagedDecimal<M, ConstDecimals<DECIMALS>>>
Source§unsafe fn read_from_payload(payload: &Self::PAYLOAD) -> Self
unsafe fn read_from_payload(payload: &Self::PAYLOAD) -> Self
Source§unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>
unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>
Source§fn save_to_payload(self, payload: &mut Self::PAYLOAD)
fn save_to_payload(self, payload: &mut Self::PAYLOAD)
Source§fn requires_drop() -> bool
fn requires_drop() -> bool
fn payload_size() -> usize
fn temp_decode<F, R>(payload: &Self::PAYLOAD, f: F) -> Rwhere
F: FnOnce(&Self) -> R,
Source§impl<M: ManagedTypeApi> ManagedVecItem for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> ManagedVecItem for ManagedDecimal<M, NumDecimals>
Source§const SKIPS_RESERIALIZATION: bool = false
const SKIPS_RESERIALIZATION: bool = false
u32).Source§type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>>
type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>>
Source§type Ref<'a> = Ref<'a, ManagedDecimal<M, usize>>
type Ref<'a> = Ref<'a, ManagedDecimal<M, usize>>
Source§unsafe fn read_from_payload(payload: &Self::PAYLOAD) -> Self
unsafe fn read_from_payload(payload: &Self::PAYLOAD) -> Self
Source§unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>
unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>
Source§fn save_to_payload(self, payload: &mut Self::PAYLOAD)
fn save_to_payload(self, payload: &mut Self::PAYLOAD)
Source§fn requires_drop() -> bool
fn requires_drop() -> bool
fn payload_size() -> usize
fn temp_decode<F, R>(payload: &Self::PAYLOAD, f: F) -> Rwhere
F: FnOnce(&Self) -> R,
Source§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Mul<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Mul<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
* operator.Source§fn mul(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
fn mul(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
* operation. Read moreSource§impl<M: ManagedTypeApi, D1, D2: Decimals> Mul<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1, D2: Decimals> Mul<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Mul<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Mul<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
* operator.Source§fn mul(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
fn mul(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
* operation. Read moreSource§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> MulAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> MulAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn mul_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
fn mul_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
*= operation. Read moreSource§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> MulAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> MulAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn mul_assign(&mut self, rhs: ManagedDecimal<M, D2>)
fn mul_assign(&mut self, rhs: ManagedDecimal<M, D2>)
*= operation. Read moreSource§impl<M: ManagedTypeApi, DECIMALS: Unsigned> NestedDecode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> NestedDecode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§fn dep_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<Self, H::HandledErr>where
I: NestedDecodeInput,
H: DecodeErrorHandler,
fn dep_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<Self, H::HandledErr>where
I: NestedDecodeInput,
H: DecodeErrorHandler,
dep_decode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn dep_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: NestedDecodeInput,
fn dep_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: NestedDecodeInput,
Source§impl<M: ManagedTypeApi> NestedDecode for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> NestedDecode for ManagedDecimal<M, NumDecimals>
Source§fn dep_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<Self, H::HandledErr>where
I: NestedDecodeInput,
H: DecodeErrorHandler,
fn dep_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<Self, H::HandledErr>where
I: NestedDecodeInput,
H: DecodeErrorHandler,
dep_decode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn dep_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: NestedDecodeInput,
fn dep_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: NestedDecodeInput,
Source§impl<M: ManagedTypeApi, DECIMALS: Unsigned> NestedEncode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> NestedEncode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§fn dep_encode_or_handle_err<O, H>(
&self,
dest: &mut O,
h: H,
) -> Result<(), H::HandledErr>where
O: NestedEncodeOutput,
H: EncodeErrorHandler,
fn dep_encode_or_handle_err<O, H>(
&self,
dest: &mut O,
h: H,
) -> Result<(), H::HandledErr>where
O: NestedEncodeOutput,
H: EncodeErrorHandler,
dep_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn dep_encode<O>(&self, dest: &mut O) -> Result<(), EncodeError>where
O: NestedEncodeOutput,
fn dep_encode<O>(&self, dest: &mut O) -> Result<(), EncodeError>where
O: NestedEncodeOutput,
Source§impl<M: ManagedTypeApi> NestedEncode for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> NestedEncode for ManagedDecimal<M, NumDecimals>
Source§fn dep_encode_or_handle_err<O, H>(
&self,
dest: &mut O,
h: H,
) -> Result<(), H::HandledErr>where
O: NestedEncodeOutput,
H: EncodeErrorHandler,
fn dep_encode_or_handle_err<O, H>(
&self,
dest: &mut O,
h: H,
) -> Result<(), H::HandledErr>where
O: NestedEncodeOutput,
H: EncodeErrorHandler,
dep_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn dep_encode<O>(&self, dest: &mut O) -> Result<(), EncodeError>where
O: NestedEncodeOutput,
fn dep_encode<O>(&self, dest: &mut O) -> Result<(), EncodeError>where
O: NestedEncodeOutput,
Source§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> PartialEq<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> PartialEq<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn eq(&self, other: &ManagedDecimal<M, D2>) -> bool
fn eq(&self, other: &ManagedDecimal<M, D2>) -> bool
self and other values to be equal, and is used by ==.Source§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> PartialOrd<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> PartialOrd<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§impl<M: ManagedTypeApi, D: Decimals> SCDisplay for ManagedDecimal<M, D>
impl<M: ManagedTypeApi, D: Decimals> SCDisplay for ManagedDecimal<M, D>
fn fmt<F: FormatByteReceiver>(&self, f: &mut F)
Source§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Sub<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Sub<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
- operator.Source§fn sub(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
fn sub(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
- operation. Read moreSource§impl<DECIMALS: Unsigned, M: ManagedTypeApi> Sub<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<DECIMALS: Unsigned, M: ManagedTypeApi> Sub<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
- operator.Source§fn sub(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
fn sub(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
- operation. Read moreSource§impl<M: ManagedTypeApi, DECIMALS: Unsigned> Sub for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> Sub for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§type Output = ManagedDecimal<M, ConstDecimals<DECIMALS>>
type Output = ManagedDecimal<M, ConstDecimals<DECIMALS>>
- operator.Source§fn sub(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
fn sub(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output
- operation. Read moreSource§impl<M: ManagedTypeApi> Sub for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> Sub for ManagedDecimal<M, NumDecimals>
Source§type Output = ManagedDecimal<M, usize>
type Output = ManagedDecimal<M, usize>
- operator.Source§fn sub(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
fn sub(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output
- operation. Read moreSource§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> SubAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> SubAssign<&ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn sub_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
fn sub_assign(&mut self, rhs: &ManagedDecimal<M, D2>)
-= operation. Read moreSource§impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> SubAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> SubAssign<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
Source§fn sub_assign(&mut self, rhs: ManagedDecimal<M, D2>)
fn sub_assign(&mut self, rhs: ManagedDecimal<M, D2>)
-= operation. Read moreSource§impl<M: ManagedTypeApi, DECIMALS: Unsigned> TopDecode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> TopDecode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
top_decode that can handle errors as soon as they occur.
For instance it can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
Source§impl<M: ManagedTypeApi> TopDecode for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> TopDecode for ManagedDecimal<M, NumDecimals>
Source§fn top_decode_or_handle_err<I, H>(
top_input: I,
h: H,
) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
fn top_decode_or_handle_err<I, H>(
top_input: I,
h: H,
) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
top_decode that can handle errors as soon as they occur.
For instance it can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
Source§impl<M: ManagedTypeApi, DECIMALS: Unsigned> TopEncode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> TopEncode for ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§fn top_encode_or_handle_err<O, H>(
&self,
output: O,
h: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
fn top_encode_or_handle_err<O, H>(
&self,
output: O,
h: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
top_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
Source§impl<M: ManagedTypeApi> TopEncode for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> TopEncode for ManagedDecimal<M, NumDecimals>
Source§fn top_encode_or_handle_err<O, H>(
&self,
output: O,
h: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
fn top_encode_or_handle_err<O, H>(
&self,
output: O,
h: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
top_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
Source§impl<M: ManagedTypeApi, DECIMALS: Unsigned> TypeAbi for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi, DECIMALS: Unsigned> TypeAbi for ManagedDecimal<M, ConstDecimals<DECIMALS>>
type Unmanaged = ManagedDecimal<M, ConstDecimals<DECIMALS>>
Source§fn type_name_rust() -> TypeName
fn type_name_rust() -> TypeName
fn type_names() -> TypeNames
Source§fn type_name_specific() -> Option<TypeName>
fn type_name_specific() -> Option<TypeName>
Source§fn provide_type_descriptions<TDC: TypeDescriptionContainer>(
accumulator: &mut TDC,
)
fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC, )
Source§impl<M: ManagedTypeApi> TypeAbi for ManagedDecimal<M, NumDecimals>
impl<M: ManagedTypeApi> TypeAbi for ManagedDecimal<M, NumDecimals>
type Unmanaged = ManagedDecimal<M, usize>
Source§fn type_name_rust() -> TypeName
fn type_name_rust() -> TypeName
fn type_names() -> TypeNames
Source§fn type_name_specific() -> Option<TypeName>
fn type_name_specific() -> Option<TypeName>
Source§fn provide_type_descriptions<TDC: TypeDescriptionContainer>(
accumulator: &mut TDC,
)
fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC, )
impl<M: ManagedTypeApi, DECIMALS: Unsigned> TypeAbiFrom<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>
impl<M: ManagedTypeApi> TypeAbiFrom<ManagedDecimal<M, usize>> for ManagedDecimal<M, NumDecimals>
Auto Trait Implementations§
impl<M, D> Freeze for ManagedDecimal<M, D>
impl<M, D> RefUnwindSafe for ManagedDecimal<M, D>
impl<M, D> Send for ManagedDecimal<M, D>
impl<M, D> Sync for ManagedDecimal<M, D>
impl<M, D> Unpin for ManagedDecimal<M, D>
impl<M, D> UnsafeUnpin for ManagedDecimal<M, D>
impl<M, D> UnwindSafe for ManagedDecimal<M, D>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> MultiValueConstLength for T
impl<T> MultiValueConstLength for T
Source§const MULTI_VALUE_CONST_LEN: usize = 1
const MULTI_VALUE_CONST_LEN: usize = 1
Source§impl<T> MultiValueLength for T
impl<T> MultiValueLength for T
Source§fn multi_value_len(&self) -> usize
fn multi_value_len(&self) -> usize
Source§impl<T> SCCodec for Twhere
T: TopEncode,
impl<T> SCCodec for Twhere
T: TopEncode,
fn fmt<F>(&self, f: &mut F)where
F: FormatByteReceiver,
Source§impl<T> TopDecodeMulti for Twhere
T: TopDecode,
impl<T> TopDecodeMulti for Twhere
T: TopDecode,
Source§const IS_SINGLE_VALUE: bool = true
const IS_SINGLE_VALUE: bool = true
fn multi_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<T, <H as DecodeErrorHandler>::HandledErr>where
I: TopDecodeMultiInput,
H: DecodeErrorHandler,
fn multi_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: TopDecodeMultiInput,
Source§impl<T> TopEncodeMulti for Twhere
T: TopEncode,
impl<T> TopEncodeMulti for Twhere
T: TopEncode,
Source§fn multi_encode_or_handle_err<O, H>(
&self,
output: &mut O,
h: H,
) -> Result<(), <H as EncodeErrorHandler>::HandledErr>where
O: TopEncodeMultiOutput,
H: EncodeErrorHandler,
fn multi_encode_or_handle_err<O, H>(
&self,
output: &mut O,
h: H,
) -> Result<(), <H as EncodeErrorHandler>::HandledErr>where
O: TopEncodeMultiOutput,
H: EncodeErrorHandler,
top_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.