Enum gear_common::gas_provider::GasNode
source · pub enum GasNode<ExternalId: Clone, Id: Clone, Balance: Zero + Clone, Funds> {
External {
id: ExternalId,
multiplier: GasMultiplier<Funds, Balance>,
value: Balance,
lock: NodeLock<Balance>,
system_reserve: Balance,
refs: ChildrenRefs,
consumed: bool,
deposit: bool,
},
Cut {
id: ExternalId,
multiplier: GasMultiplier<Funds, Balance>,
value: Balance,
lock: NodeLock<Balance>,
},
Reserved {
id: ExternalId,
multiplier: GasMultiplier<Funds, Balance>,
value: Balance,
lock: NodeLock<Balance>,
refs: ChildrenRefs,
consumed: bool,
},
SpecifiedLocal {
parent: Id,
root: Id,
value: Balance,
lock: NodeLock<Balance>,
system_reserve: Balance,
refs: ChildrenRefs,
consumed: bool,
},
UnspecifiedLocal {
parent: Id,
root: Id,
lock: NodeLock<Balance>,
system_reserve: Balance,
},
}
Expand description
Node of the [‘Tree’] gas tree
Variants§
External
A root node for each gas tree.
Usually created when a new gasful logic started (i.e., message sent).
Fields
id: ExternalId
multiplier: GasMultiplier<Funds, Balance>
value: Balance
system_reserve: Balance
refs: ChildrenRefs
Cut
A node created by “cutting” value from some other tree node.
Such node types are detached and aren’t part of the tree structure (not node’s parent, not node’s child).
Reserved
A node used for gas reservation feature.
Such node types are detached from initial tree and may act the a root of new tree.
SpecifiedLocal
A node, which is a part of the tree structure, that can be a parent and/or a child.
As well as External
node, it has an internal balance and can exist
while being consumed (see Tree::consume
for details).
However, it has a parent
field pointing to the node,
from which that one was created.
UnspecifiedLocal
Pretty same as SpecifiedLocal
, but doesn’t have internal balance,
so relies on its parent
.
Such nodes don’t have children references.
Implementations§
source§impl<ExternalId: Clone, Id: Clone + Copy, Balance: Default + Zero + Clone + Copy + Saturating, Funds: Clone> GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId: Clone, Id: Clone + Copy, Balance: Default + Zero + Clone + Copy + Saturating, Funds: Clone> GasNode<ExternalId, Id, Balance, Funds>
sourcepub fn total_value(&self) -> Balance
pub fn total_value(&self) -> Balance
Returns total gas value inside GasNode.
source§impl<ExternalId: Clone, Id: Clone + Copy, Balance: Default + Zero + Clone + Copy, Funds: Clone> GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId: Clone, Id: Clone + Copy, Balance: Default + Zero + Clone + Copy, Funds: Clone> GasNode<ExternalId, Id, Balance, Funds>
sourcepub fn new(
id: ExternalId,
multiplier: GasMultiplier<Funds, Balance>,
value: Balance,
deposit: bool,
) -> Self
pub fn new( id: ExternalId, multiplier: GasMultiplier<Funds, Balance>, value: Balance, deposit: bool, ) -> Self
Creates a new GasNode::External
root node for a new tree.
sourcepub fn increase_spec_refs(&mut self)
pub fn increase_spec_refs(&mut self)
Increases node’s spec refs, if it can have any
sourcepub fn decrease_spec_refs(&mut self)
pub fn decrease_spec_refs(&mut self)
Decreases node’s spec refs, if it can have any
sourcepub fn increase_unspec_refs(&mut self)
pub fn increase_unspec_refs(&mut self)
Increases node’s unspec refs, if it can have any
sourcepub fn decrease_unspec_refs(&mut self)
pub fn decrease_unspec_refs(&mut self)
Decreases node’s unspec refs, if it can have any
sourcepub fn mark_consumed(&mut self)
pub fn mark_consumed(&mut self)
Marks the node as consumed, if it has the flag
sourcepub fn is_consumed(&self) -> bool
pub fn is_consumed(&self) -> bool
Returns whether the node is marked consumed or not
Only GasNode::External
, GasNode::SpecifiedLocal
, GasNode::Reserved
can be marked
consumed and not deleted. See Tree::consume
for details.
sourcepub fn is_patron(&self) -> bool
pub fn is_patron(&self) -> bool
Returns whether the node is patron or not.
The flag signals whether the node isn’t available for the gas to be spent from it.
These are nodes that have one of the following requirements:
- Have unspec refs (regardless of being consumed).
- Are not consumed.
Patron nodes are those on which other nodes of the tree rely (including the self node).
sourcepub fn value_mut(&mut self) -> Option<&mut Balance>
pub fn value_mut(&mut self) -> Option<&mut Balance>
Get’s a mutable access to node’s inner gas balance, if it can have any
sourcepub fn lock(&self) -> &NodeLock<Balance>
pub fn lock(&self) -> &NodeLock<Balance>
Returns node’s locked gas balance, if it can have any.
sourcepub fn lock_mut(&mut self) -> &mut NodeLock<Balance>
pub fn lock_mut(&mut self) -> &mut NodeLock<Balance>
Get’s a mutable access to node’s locked gas balance, if it can have any.
sourcepub fn system_reserve(&self) -> Option<Balance>
pub fn system_reserve(&self) -> Option<Balance>
Returns node’s system reserved gas balance, if it can have any.
sourcepub fn system_reserve_mut(&mut self) -> Option<&mut Balance>
pub fn system_reserve_mut(&mut self) -> Option<&mut Balance>
Gets a mutable access to node’s system reserved gas balance, if it can have any.
sourcepub fn parent(&self) -> Option<Id>
pub fn parent(&self) -> Option<Id>
Returns node’s parent, if it can have any.
That is, GasNode::External
, GasNode::Cut
, ’GasNode::Reservednodes don't have a parent, so a
None` is returned if the function is
called on them.
sourcepub fn unspec_refs(&self) -> u32
pub fn unspec_refs(&self) -> u32
Returns node’s unspec refs
sourcepub fn external_data(
&self,
) -> Option<(ExternalId, GasMultiplier<Funds, Balance>)>
pub fn external_data( &self, ) -> Option<(ExternalId, GasMultiplier<Funds, Balance>)>
Returns external origin and funds multiplier of the node if contains that data inside.
Trait Implementations§
source§impl<ExternalId: Clone + Clone, Id: Clone + Clone, Balance: Clone + Zero + Clone, Funds: Clone> Clone for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId: Clone + Clone, Id: Clone + Clone, Balance: Clone + Zero + Clone, Funds: Clone> Clone for GasNode<ExternalId, Id, Balance, Funds>
source§impl<ExternalId: Debug + Clone, Id: Debug + Clone, Balance: Debug + Zero + Clone, Funds: Debug> Debug for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId: Debug + Clone, Id: Debug + Clone, Balance: Debug + Zero + Clone, Funds: Debug> Debug for GasNode<ExternalId, Id, Balance, Funds>
source§impl<ExternalId, Id, Balance, Funds> Decode for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> Decode for GasNode<ExternalId, Id, Balance, Funds>
source§fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy,
) -> Result<Self, Error>
fn decode<__CodecInputEdqy: Input>( __codec_input_edqy: &mut __CodecInputEdqy, ) -> Result<Self, Error>
§fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
§fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
§fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
source§impl<ExternalId, Id, Balance, Funds> Encode for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> Encode for GasNode<ExternalId, Id, Balance, Funds>
source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy,
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy, )
§fn using_encoded<R, F>(&self, f: F) -> R
fn using_encoded<R, F>(&self, f: F) -> R
§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
source§impl<ExternalId, Id, Balance, Funds> MaxEncodedLen for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> MaxEncodedLen for GasNode<ExternalId, Id, Balance, Funds>
source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
source§impl<ExternalId: PartialEq + Clone, Id: PartialEq + Clone, Balance: PartialEq + Zero + Clone, Funds: PartialEq> PartialEq for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId: PartialEq + Clone, Id: PartialEq + Clone, Balance: PartialEq + Zero + Clone, Funds: PartialEq> PartialEq for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> EncodeLike for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId: Eq + Clone, Id: Eq + Clone, Balance: Eq + Zero + Clone, Funds: Eq> Eq for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId: Clone, Id: Clone, Balance: Zero + Clone, Funds> StructuralPartialEq for GasNode<ExternalId, Id, Balance, Funds>
Auto Trait Implementations§
impl<ExternalId, Id, Balance, Funds> Freeze for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> RefUnwindSafe for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> Send for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> Sync for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> Unpin for GasNode<ExternalId, Id, Balance, Funds>
impl<ExternalId, Id, Balance, Funds> UnwindSafe for GasNode<ExternalId, Id, Balance, Funds>
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
§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Conv for T
impl<T> Conv for T
§impl<T> DecodeAll for Twhere
T: Decode,
impl<T> DecodeAll for Twhere
T: Decode,
§fn decode_all(input: &mut &[u8]) -> Result<T, Error>
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read more§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for T
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.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Hashable for Twhere
T: Codec,
impl<T> Hashable for Twhere
T: Codec,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<T> IsType<T> for T
impl<T> IsType<T> for T
§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
§impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere
T: Codec,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read more§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
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 Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.