pub struct TokenAmount { /* private fields */ }
Expand description
Protocol level token (PLT) amount representation. The numerical amount
represented is value * 10^(-decimals)
.
The number of decimals in the token amount should always match the number of
decimals for the token it represents an amount for.
Since the number of decimals always matches the token, TokenAmount
can be considered a fixed point decimal and does not implement any floating
point behaviour. The type also does not implement any arithmetic operations.
This is intentional, any arithmetic operations and floating point operations
should be performed using e.g. rust_decimal::Decimal
before converting to
TokenAmount
. Notice also that the decimal
part could be left out of the
TokenAmount
representation without loss of information, but it is there to
make TokenAmount
self-contained with regard to the numerical value
represented. This enables additional validation, both programmatic and at
user level.
Implementations§
Source§impl TokenAmount
impl TokenAmount
Sourcepub fn from_raw(value: u64, decimals: u8) -> TokenAmount
pub fn from_raw(value: u64, decimals: u8) -> TokenAmount
Construct a TokenAmount
from a value without decimal places and the
number of decimals, meaning the token amount is computed as value * 10^(-decimals)
.
Sourcepub fn decimals(&self) -> u8
pub fn decimals(&self) -> u8
The number of decimals in the token amount.
The numerical amount represented by the TokenAmount
is value * 10^(-decimals)
Sourcepub fn value(&self) -> u64
pub fn value(&self) -> u64
The amount of tokens as an unscaled integer value.
The numerical amount represented by the TokenAmount
is value * 10^(-decimals)
Sourcepub fn try_from_rust_decimal(
decimal: Decimal,
decimals: u8,
conversion_rule: ConversionRule,
) -> Result<TokenAmount, TokenAmountConversionError>
pub fn try_from_rust_decimal( decimal: Decimal, decimals: u8, conversion_rule: ConversionRule, ) -> Result<TokenAmount, TokenAmountConversionError>
Converts rust_decimal::Decimal
to a token amount of the same
numerical value but represented with the given number of decimals
.
This may require rescaling but no rounding will be performed.
If rounding is required to represent the numeric value with the given
number of decimals
, an error is returned.
The given number of decimals
should
be equal to the number of decimals for the token it represents an amount
for.
Sourcepub fn try_to_rust_decimal(&self) -> Result<Decimal, TokenAmountConversionError>
pub fn try_to_rust_decimal(&self) -> Result<Decimal, TokenAmountConversionError>
Converts the token amount to a rust_decimal::Decimal
of the same
scale and same exact numerical value.
Sourcepub fn from_str(
decimal_str: &str,
decimals: u8,
conversion_rule: ConversionRule,
) -> Result<TokenAmount, TokenAmountConversionError>
pub fn from_str( decimal_str: &str, decimals: u8, conversion_rule: ConversionRule, ) -> Result<TokenAmount, TokenAmountConversionError>
Interprets the given string as a decimal number (decimal separator must
be “.” if specified) and parses it into a token amount of the same
numerical value represented with the given number of decimals
.
If rounding is required to represent the numeric value with the
given number of decimals
, an error is returned.
The given number of decimals
should
be equal to the number of decimals for the token it represents an amount
for.
Trait Implementations§
Source§impl CborDeserialize for TokenAmount
impl CborDeserialize for TokenAmount
Source§fn deserialize<C>(decoder: C) -> Result<TokenAmount, CborSerializationError>
fn deserialize<C>(decoder: C) -> Result<TokenAmount, CborSerializationError>
Source§impl CborSerialize for TokenAmount
impl CborSerialize for TokenAmount
Source§impl Clone for TokenAmount
impl Clone for TokenAmount
Source§fn clone(&self) -> TokenAmount
fn clone(&self) -> TokenAmount
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for TokenAmount
impl Debug for TokenAmount
Source§impl<'de> Deserialize<'de> for TokenAmount
impl<'de> Deserialize<'de> for TokenAmount
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<TokenAmount, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<TokenAmount, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Display for TokenAmount
impl Display for TokenAmount
Source§impl Hash for TokenAmount
impl Hash for TokenAmount
Source§impl PartialEq for TokenAmount
impl PartialEq for TokenAmount
Source§impl PartialOrd for TokenAmount
impl PartialOrd for TokenAmount
Source§impl Serialize for TokenAmount
impl Serialize for TokenAmount
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Source§impl TryFrom<TokenAmount> for TokenAmount
impl TryFrom<TokenAmount> for TokenAmount
Source§impl TryFrom<TokenAmountJson> for TokenAmount
impl TryFrom<TokenAmountJson> for TokenAmount
Source§type Error = ParseIntError
type Error = ParseIntError
Source§fn try_from(
json: TokenAmountJson,
) -> Result<TokenAmount, <TokenAmount as TryFrom<TokenAmountJson>>::Error>
fn try_from( json: TokenAmountJson, ) -> Result<TokenAmount, <TokenAmount as TryFrom<TokenAmountJson>>::Error>
impl Copy for TokenAmount
impl Eq for TokenAmount
impl StructuralPartialEq for TokenAmount
Auto Trait Implementations§
impl Freeze for TokenAmount
impl RefUnwindSafe for TokenAmount
impl Send for TokenAmount
impl Sync for TokenAmount
impl Unpin for TokenAmount
impl UnwindSafe for TokenAmount
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.