Skip to main content

ManagedDecimal

Struct ManagedDecimal 

Source
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>

Source

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.

Source

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.

Source

pub 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.

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.

Source

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.

Source

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.

Source

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.

Source

pub fn scale(&self) -> usize

Returns the number of decimal places.

Source

pub fn scaling_factor(&self) -> ManagedRef<'static, M, BigUint<M>>

Returns the scaling factor 10^decimals as a static reference.

Source

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.

Source

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>>

Source

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.

Source

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>

Source

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.

Source

pub fn exp_approx(&self) -> ManagedDecimal<M, D>
where ManagedDecimal<M, D>: Add<Output = 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).

Source

pub fn compounded_interest_factor<Precision: Decimals>( &self, expiration: u64, precision: Precision, ) -> ManagedDecimal<M, Precision>
where ManagedDecimal<M, Precision>: Add<Output = 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 * t

Multiply 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>

Source

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) / scale

Adding 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.

Source

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) / denominator

Adding 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>

Source

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.

Source

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>

Source

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>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output

Performs the + operation. Read more
Source§

impl<DECIMALS: Unsigned, M: ManagedTypeApi> Add<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output

Performs the + operation. Read more
Source§

impl<M: ManagedTypeApi, DECIMALS: Unsigned> Add for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

type Output = ManagedDecimal<M, ConstDecimals<DECIMALS>>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output

Performs the + operation. Read more
Source§

impl<M: ManagedTypeApi> Add for ManagedDecimal<M, NumDecimals>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the + operator.
Source§

fn add(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output

Performs the + operation. Read more
Source§

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>)

Performs the += operation. Read more
Source§

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>)

Performs the += operation. Read more
Source§

impl<M: Clone + ManagedTypeApi, D: Clone + Decimals> Clone for ManagedDecimal<M, D>

Source§

fn clone(&self) -> ManagedDecimal<M, D>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<M: ManagedTypeApi, D: Decimals> Debug for ManagedDecimal<M, D>

Source§

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

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

impl<M: ManagedTypeApi, D: Decimals> Display for ManagedDecimal<M, D>

Source§

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

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

impl<DECIMALS: Unsigned, M: ManagedTypeApi> Div<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output

Performs the / operation. Read more
Source§

impl<M: ManagedTypeApi, D1, D2: Decimals> Div<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
where D1: Sub<D2> + Decimals, <D1 as Sub<D2>>::Output: Decimals,

Source§

type Output = ManagedDecimal<M, <D1 as Sub<D2>>::Output>

The resulting type after applying the / operator.
Source§

fn div(self, other: ManagedDecimal<M, D2>) -> Self::Output

Performs the / operation. Read more
Source§

impl<DECIMALS: Unsigned, M: ManagedTypeApi> Div<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output

Performs the / operation. Read more
Source§

impl<M: ManagedTypeApi, D: Decimals> Div<usize> for ManagedDecimal<M, D>

Source§

type Output = ManagedDecimal<M, D>

The resulting type after applying the / operator.
Source§

fn div(self, other: NumDecimals) -> Self::Output

Performs the / operation. Read more
Source§

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>)

Performs the /= operation. Read more
Source§

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>)

Performs the /= operation. Read more
Source§

impl<M: ManagedTypeApi, DECIMALS: Unsigned> From<BigUint<M>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

fn from(value: BigUint<M>) -> Self

Converts to this type from the input type.
Source§

impl<M: ManagedTypeApi, DECIMALS: Unsigned> From<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>

Source§

fn from(value: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self

Converts to this type from the input type.
Source§

impl<M: ManagedTypeApi, DECIMALS: Unsigned> ManagedVecItem for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

const SKIPS_RESERIALIZATION: bool = false

If true, then the encoding of the item is identical to the payload, and no further conversion is necessary (the underlying buffer can be used as-is during serialization). False for all managed types, but true for basic types (like u32).
Source§

type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UTerm, B1>, B0>, B0>>

Type managing the underlying binary representation in a ManagedVec..
Source§

type Ref<'a> = Ref<'a, ManagedDecimal<M, ConstDecimals<DECIMALS>>>

Reference representation of the ManagedVec item. Read more
Source§

unsafe fn read_from_payload(payload: &Self::PAYLOAD) -> Self

Parses given bytes as a an owned object. Read more
Source§

unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>

Parses given bytes as a representation of the object, either owned, or a reference. Read more
Source§

fn save_to_payload(self, payload: &mut Self::PAYLOAD)

Converts the object into bytes. Read more
Source§

fn requires_drop() -> bool

Signals that vec should drop all items one by one when being itself dropped. Read more
Source§

fn payload_size() -> usize

Source§

fn temp_decode<F, R>(payload: &Self::PAYLOAD, f: F) -> R
where F: FnOnce(&Self) -> R,

Source§

impl<M: ManagedTypeApi> ManagedVecItem for ManagedDecimal<M, NumDecimals>

Source§

const SKIPS_RESERIALIZATION: bool = false

If true, then the encoding of the item is identical to the payload, and no further conversion is necessary (the underlying buffer can be used as-is during serialization). False for all managed types, but true for basic types (like u32).
Source§

type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>>

Type managing the underlying binary representation in a ManagedVec..
Source§

type Ref<'a> = Ref<'a, ManagedDecimal<M, usize>>

Reference representation of the ManagedVec item. Read more
Source§

unsafe fn read_from_payload(payload: &Self::PAYLOAD) -> Self

Parses given bytes as a an owned object. Read more
Source§

unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>

Parses given bytes as a representation of the object, either owned, or a reference. Read more
Source§

fn save_to_payload(self, payload: &mut Self::PAYLOAD)

Converts the object into bytes. Read more
Source§

fn requires_drop() -> bool

Signals that vec should drop all items one by one when being itself dropped. Read more
Source§

fn payload_size() -> usize

Source§

fn temp_decode<F, R>(payload: &Self::PAYLOAD, f: F) -> R
where F: FnOnce(&Self) -> R,

Source§

impl<DECIMALS: Unsigned, M: ManagedTypeApi> Mul<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output

Performs the * operation. Read more
Source§

impl<M: ManagedTypeApi, D1, D2: Decimals> Mul<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>
where D1: Add<D2> + Decimals, <D1 as Add<D2>>::Output: Decimals,

Source§

type Output = ManagedDecimal<M, <D1 as Add<D2>>::Output>

The resulting type after applying the * operator.
Source§

fn mul(self, other: ManagedDecimal<M, D2>) -> Self::Output

Performs the * operation. Read more
Source§

impl<DECIMALS: Unsigned, M: ManagedTypeApi> Mul<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output

Performs the * operation. Read more
Source§

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>)

Performs the *= operation. Read more
Source§

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>)

Performs the *= operation. Read more
Source§

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>

Version of 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>

Attempt to deserialise the value from input, using the format of an object nested inside another structure. In case of success returns the deserialized value and the number of bytes consumed during the operation.
Source§

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>

Version of 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>

Attempt to deserialise the value from input, using the format of an object nested inside another structure. In case of success returns the deserialized value and the number of bytes consumed during the operation.
Source§

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>

Version of 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>

NestedEncode to output, using the format of an object nested inside another structure. Does not provide compact version.
Source§

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>

Version of 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>

NestedEncode to output, using the format of an object nested inside another structure. Does not provide compact version.
Source§

impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> PartialEq<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>

Source§

fn eq(&self, other: &ManagedDecimal<M, D2>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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<M: ManagedTypeApi, D1: Decimals, D2: Decimals> PartialOrd<ManagedDecimal<M, D2>> for ManagedDecimal<M, D1>

Source§

fn partial_cmp(&self, other: &ManagedDecimal<M, D2>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · 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 (const: unstable) · 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 (const: unstable) · 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 (const: unstable) · 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<M: ManagedTypeApi, D: Decimals> SCDisplay for ManagedDecimal<M, D>

Source§

impl<DECIMALS: Unsigned, M: ManagedTypeApi> Sub<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, NumDecimals>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output

Performs the - operation. Read more
Source§

impl<DECIMALS: Unsigned, M: ManagedTypeApi> Sub<ManagedDecimal<M, usize>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output

Performs the - operation. Read more
Source§

impl<M: ManagedTypeApi, DECIMALS: Unsigned> Sub for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

type Output = ManagedDecimal<M, ConstDecimals<DECIMALS>>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: ManagedDecimal<M, ConstDecimals<DECIMALS>>) -> Self::Output

Performs the - operation. Read more
Source§

impl<M: ManagedTypeApi> Sub for ManagedDecimal<M, NumDecimals>

Source§

type Output = ManagedDecimal<M, usize>

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: ManagedDecimal<M, NumDecimals>) -> Self::Output

Performs the - operation. Read more
Source§

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>)

Performs the -= operation. Read more
Source§

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>)

Performs the -= operation. Read more
Source§

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>

Version of 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,

Attempt to deserialize the value from input.
Source§

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>

Version of 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,

Attempt to deserialize the value from input.
Source§

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>

Version of 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,

Attempt to serialize the value to output.
Source§

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>

Version of 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,

Attempt to serialize the value to output.
Source§

impl<M: ManagedTypeApi, DECIMALS: Unsigned> TypeAbi for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

type Unmanaged = ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

fn type_name() -> TypeName

The type name, as it shows up in the ABI.
Source§

fn type_name_rust() -> TypeName

The type name as it shows up in Rust code. Used for proxies. Read more
Source§

fn type_names() -> TypeNames

Source§

fn type_name_specific() -> Option<TypeName>

Specific name to be optionally added to the ABI. Read more
Source§

fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC, )

A type can provide more than its own name. For instance, a struct can also provide the descriptions of the type of its fields. TypeAbi doesn’t care for the exact accumulator type, which is abstracted by the TypeDescriptionContainer trait.
Source§

impl<M: ManagedTypeApi> TypeAbi for ManagedDecimal<M, NumDecimals>

Source§

type Unmanaged = ManagedDecimal<M, usize>

Source§

fn type_name() -> TypeName

The type name, as it shows up in the ABI.
Source§

fn type_name_rust() -> TypeName

The type name as it shows up in Rust code. Used for proxies. Read more
Source§

fn type_names() -> TypeNames

Source§

fn type_name_specific() -> Option<TypeName>

Specific name to be optionally added to the ABI. Read more
Source§

fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC, )

A type can provide more than its own name. For instance, a struct can also provide the descriptions of the type of its fields. TypeAbi doesn’t care for the exact accumulator type, which is abstracted by the TypeDescriptionContainer trait.
Source§

impl<M: ManagedTypeApi, DECIMALS: Unsigned> TypeAbiFrom<ManagedDecimal<M, ConstDecimals<DECIMALS>>> for ManagedDecimal<M, ConstDecimals<DECIMALS>>

Source§

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>
where D: Send, <M as HandleTypeInfo>::BigIntHandle: Send, M: Send,

§

impl<M, D> Sync for ManagedDecimal<M, D>
where D: Sync, <M as HandleTypeInfo>::BigIntHandle: Sync, M: Sync,

§

impl<M, D> Unpin for ManagedDecimal<M, D>
where D: Unpin, <M as HandleTypeInfo>::BigIntHandle: Unpin, M: Unpin,

§

impl<M, D> UnsafeUnpin for ManagedDecimal<M, D>

§

impl<M, D> UnwindSafe for ManagedDecimal<M, D>

Blanket Implementations§

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> 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<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> MultiValueConstLength for T
where T: TopEncode + TopDecode,

Source§

const MULTI_VALUE_CONST_LEN: usize = 1

The fixed (constant) number of single items contained a multi-value. Read more
Source§

impl<T> MultiValueLength for T
where T: TopEncode + TopDecode,

Source§

fn multi_value_len(&self) -> usize

The number of single items contained a multi-value.
Source§

impl<T> SCCodec for T
where T: TopEncode,

Source§

fn fmt<F>(&self, f: &mut F)

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> TopDecodeMulti for T
where T: TopDecode,

Source§

const IS_SINGLE_VALUE: bool = true

Used to optimize single value loading of endpoint arguments.
Source§

fn multi_decode_or_handle_err<I, H>( input: &mut I, h: H, ) -> Result<T, <H as DecodeErrorHandler>::HandledErr>

Source§

fn multi_decode<I>(input: &mut I) -> Result<Self, DecodeError>

Source§

impl<T> TopEncodeMulti for T
where T: TopEncode,

Source§

fn multi_encode_or_handle_err<O, H>( &self, output: &mut O, h: H, ) -> Result<(), <H as EncodeErrorHandler>::HandledErr>

Version of 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 multi_encode<O>(&self, output: &mut O) -> Result<(), EncodeError>

Attempt to serialize the value to output.
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<O, T> ProxyArg<O> for T
where O: TypeAbiFrom<T>, T: TopEncodeMulti,

Source§

impl<T, U> TypeAbiFrom<TypeAbiUniversalInput<T>> for U