Struct gear_common::gas_provider::TreeImpl

source ·
pub struct TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>(/* private fields */);

Trait Implementations§

source§

impl<TotalValue, Balance, Funds, InternalError, Error, ExternalId, NodeId, StorageMap> LockableTree for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where Balance: BalanceTrait, Funds: Clone, TotalValue: ValueStorage<Value = Balance>, InternalError: Error, Error: From<InternalError>, ExternalId: Clone, NodeId: Copy, StorageMap: MapStorage<Key = NodeId, Value = GasNode<ExternalId, NodeId, Balance, Funds>>,

source§

fn lock( key: impl Into<Self::NodeId>, id: LockId, amount: Self::Balance, ) -> Result<(), Self::Error>

Locking some value from underlying node balance. Read more
source§

fn unlock( key: impl Into<Self::NodeId>, id: LockId, amount: Self::Balance, ) -> Result<(), Self::Error>

Unlocking some value from node’s locked balance. Read more
source§

fn get_lock( key: impl Into<Self::NodeId>, id: LockId, ) -> Result<Self::Balance, Self::Error>

Get locked value associated with given id. Read more
source§

fn unlock_all( key: impl Into<Self::NodeId>, id: LockId, ) -> Result<Self::Balance, Self::Error>

Unlocking all value from node’s locked balance. Returns the actual amount having been unlocked (wrapped in a Result) Read more
source§

impl<TotalValue, Balance, Funds, InternalError, Error, ExternalId, NodeId, StorageMap> ReservableTree for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where Balance: BalanceTrait, Funds: Clone, TotalValue: ValueStorage<Value = Balance>, InternalError: Error, Error: From<InternalError>, ExternalId: Clone, NodeId: Copy, StorageMap: MapStorage<Key = NodeId, Value = GasNode<ExternalId, NodeId, Balance, Funds>>,

source§

fn reserve( key: impl Into<Self::NodeId>, new_key: impl Into<Self::NodeId>, amount: Self::Balance, ) -> Result<(), Self::Error>

Reserve some value from underlying balance. Read more
source§

fn system_reserve( key: impl Into<Self::NodeId>, amount: Self::Balance, ) -> Result<(), Self::Error>

Reserve some value from underlying balance. Read more
source§

fn system_unreserve( key: impl Into<Self::NodeId>, ) -> Result<Self::Balance, Self::Error>

Unreserve some value from underlying balance. Read more
source§

fn get_system_reserve( key: impl Into<Self::NodeId>, ) -> Result<Self::Balance, Self::Error>

Get system reserve value associated with given id. Read more
source§

impl<TotalValue, Balance, Funds, InternalError, Error, ExternalId, NodeId, StorageMap> Tree for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where Balance: BalanceTrait, Funds: Clone, TotalValue: ValueStorage<Value = Balance>, InternalError: Error, Error: From<InternalError>, ExternalId: Clone, NodeId: Copy, StorageMap: MapStorage<Key = NodeId, Value = GasNode<ExternalId, NodeId, Balance, Funds>>,

source§

fn consume(key: impl Into<Self::NodeId>) -> ConsumeResultOf<Self>

Marks a node with key as consumed, if possible, and tries to return it’s value and delete it. The function performs same procedure with all the nodes on the path from it to the root, if possible.

Marking a node as consumed is possible only for GasNode::External and GasNode::SpecifiedLocal nodes. That is because these nodes can be not deleted after the function call, because of, for instance, having children refs. Such nodes as GasNode::UnspecifiedLocal and GasNode::ReservedLocal are removed when the function is called, so there is no need for marking them as consumed.

When consuming the node, it’s value is mutated by calling catch_value, which tries to either return or move value upstream if possible. Read the catch_value function’s documentation for details.

To delete node, here should be two requirements:

  1. Self::consume was called on the node.
  2. The node has no children, i.e. spec/unspec refs.

So if it’s impossible to delete a node, then it’s impossible to delete its parent in the current call. Also if it’s possible to delete a node, then it doesn’t necessarily mean that its parent will be deleted. An example here could be the case, when during async execution original message went to wait list, so wasn’t consumed but the one generated during the execution of the original message went to message queue and was successfully executed.

source§

fn spend( key: impl Into<Self::NodeId>, amount: Self::Balance, ) -> Result<Self::NegativeImbalance, Self::Error>

Spends amount of gas from the ancestor of node with key id.

Calling the function is possible even if an ancestor is consumed.

§Note:

Node is considered as an ancestor of itself.

§

type ExternalOrigin = ExternalId

Type representing the external owner of a value (gas) item.
§

type NodeId = NodeId

Type that identifies a node of the tree.
§

type Balance = Balance

Type representing a quantity of value.
§

type Funds = Funds

Type representing a quantity of token balance.
§

type PositiveImbalance = PositiveImbalance<Balance>

Types to denote a result of some unbalancing operation - that is operations that create inequality between the underlying value supply and some hypothetical “collateral” asset. PositiveImbalance indicates that some value has been added to circulation , i.e. total supply has increased.
§

type NegativeImbalance = NegativeImbalance<Balance>

NegativeImbalance indicates that some value has been removed from circulation, i.e. total supply has decreased.
§

type InternalError = InternalError

§

type Error = Error

Error type
source§

fn total_supply() -> Self::Balance

The total amount of value currently in circulation.
source§

fn create( origin: Self::ExternalOrigin, multiplier: GasMultiplier<Self::Funds, Self::Balance>, key: impl Into<Self::NodeId>, amount: Self::Balance, ) -> Result<Self::PositiveImbalance, Self::Error>

Increase the total issuance of the underlying value by creating some amount of it and attributing it to the origin. Read more
source§

fn get_origin_node( key: impl Into<Self::NodeId>, ) -> Result<OriginNodeDataOf<Self>, Self::Error>

The id of node, external origin and funds multiplier for a key. Read more
source§

fn get_limit_node( key: impl Into<Self::NodeId>, ) -> Result<(Self::Balance, Self::NodeId), Self::Error>

Get value associated with given id and the key of an ancestor, that keeps this value. Read more
source§

fn get_limit_node_consumed( key: impl Into<Self::NodeId>, ) -> Result<(Self::Balance, Self::NodeId), Self::Error>

Get value associated with given id and the key of an consumed ancestor, that keeps this value. Read more
source§

fn split_with_value( key: impl Into<Self::NodeId>, new_key: impl Into<Self::NodeId>, amount: Self::Balance, ) -> Result<(), Self::Error>

Split underlying value. Read more
source§

fn split( key: impl Into<Self::NodeId>, new_key: impl Into<Self::NodeId>, ) -> Result<(), Self::Error>

Split underlying value. Read more
source§

fn cut( key: impl Into<Self::NodeId>, new_key: impl Into<Self::NodeId>, amount: Self::Balance, ) -> Result<(), Self::Error>

Cut underlying value to a reserved node. Read more
source§

fn create_deposit( key: impl Into<Self::NodeId>, new_key: impl Into<Self::NodeId>, amount: Self::Balance, ) -> Result<(), Self::Error>

Creates deposit external node to be used as pre-defined gas node.
source§

fn exists(key: impl Into<Self::NodeId>) -> bool

Return bool, defining does node exist.
source§

fn exists_and_deposit(key: impl Into<Self::NodeId>) -> bool

Returns bool, defining does node exist and is external with deposit.
source§

fn clear()

Removes all values.
source§

fn get_external( key: impl Into<Self::NodeId>, ) -> Result<Self::ExternalOrigin, Self::Error>

The external origin for a key. Read more
source§

fn get_funds_multiplier( key: impl Into<Self::NodeId>, ) -> Result<GasMultiplier<Self::Funds, Self::Balance>, Self::Error>

The funds multiplier for a key. Read more
source§

fn get_origin_key( key: impl Into<Self::NodeId>, ) -> Result<Self::NodeId, Self::Error>

The id of external node for a key. Read more
source§

fn get_limit(key: impl Into<Self::NodeId>) -> Result<Self::Balance, Self::Error>

Get value associated with given id. Read more
source§

fn get_limit_consumed( key: impl Into<Self::NodeId>, ) -> Result<Self::Balance, Self::Error>

Get value associated with given id within consumed node. Read more

Auto Trait Implementations§

§

impl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap> Freeze for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>

§

impl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap> RefUnwindSafe for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where TotalValue: RefUnwindSafe, InternalError: RefUnwindSafe, Error: RefUnwindSafe, ExternalId: RefUnwindSafe, NodeId: RefUnwindSafe, StorageMap: RefUnwindSafe,

§

impl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap> Send for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where TotalValue: Send, InternalError: Send, Error: Send, ExternalId: Send, NodeId: Send, StorageMap: Send,

§

impl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap> Sync for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where TotalValue: Sync, InternalError: Sync, Error: Sync, ExternalId: Sync, NodeId: Sync, StorageMap: Sync,

§

impl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap> Unpin for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where TotalValue: Unpin, InternalError: Unpin, Error: Unpin, ExternalId: Unpin, NodeId: Unpin, StorageMap: Unpin,

§

impl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap> UnwindSafe for TreeImpl<TotalValue, InternalError, Error, ExternalId, NodeId, StorageMap>
where TotalValue: UnwindSafe, InternalError: UnwindSafe, Error: UnwindSafe, ExternalId: UnwindSafe, NodeId: UnwindSafe, StorageMap: UnwindSafe,

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
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>
where Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>
where Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T, U> IntoKey<U> for T
where U: FromKey<T>,

§

fn into_key(self) -> U

§

impl<T> IsType<T> for T

§

fn from_ref(t: &T) -> &T

Cast reference.
§

fn into_ref(&self) -> &T

Cast reference.
§

fn from_mut(t: &mut T) -> &mut T

Cast mutable reference.
§

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

Cast mutable reference.
§

impl<T, Outer> IsWrappedBy<Outer> for T
where Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Self
where Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> T
where Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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

§

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

impl<T, U> TryIntoKey<U> for T
where U: TryFromKey<T>,

§

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

§

fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>

§

impl<S, T> UncheckedInto<T> for S
where T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for S
where T: Bounded, S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for T
where T: RefUnwindSafe,