# Struct sp_weights::WeightMeter

``pub struct WeightMeter { /* private fields */ }``
Expand description

Meters consumed weight and a hard limit for the maximal consumable weight.

Can be used to check if enough weight for an operation is available before committing to it.

## Example

``````use sp_weights::{Weight, WeightMeter};

// The weight is limited to (10, 0).
let mut meter = WeightMeter::from_limit(Weight::from_parts(10, 0));
// There is enough weight remaining for an operation with (6, 0) weight.
assert!(meter.try_consume(Weight::from_parts(6, 0)).is_ok());
assert_eq!(meter.remaining(), Weight::from_parts(4, 0));
// There is not enough weight remaining for an operation with (5, 0) weight.
assert!(!meter.try_consume(Weight::from_parts(5, 0)).is_ok());
// The total limit is obviously unchanged:
assert_eq!(meter.limit(), Weight::from_parts(10, 0));``````

## Implementations§

source§

### impl WeightMeter

source

#### pub fn from_limit(limit: Weight) -> Self

Creates `Self` from a limit for the maximal consumable weight.

source

#### pub fn max_limit() -> Self

Creates `Self` with the maximal possible limit for the consumable weight.

source

source

#### pub fn limit(&self) -> Weight

The limit can ever be accrued.

source

#### pub fn remaining(&self) -> Weight

The remaining weight that can still be consumed.

source

#### pub fn consumed_ratio(&self) -> Perbill

The ratio of consumed weight to the limit.

Calculates one ratio per component and returns the largest.

##### Example
``````use sp_weights::{Weight, WeightMeter};
use sp_arithmetic::Perbill;

let mut meter = WeightMeter::from_limit(Weight::from_parts(10, 20));
// Nothing consumed so far:
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(0));
meter.consume(Weight::from_parts(5, 5));
// The ref-time is the larger ratio:
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(50));
meter.consume(Weight::from_parts(1, 10));
// Now the larger ratio is proof-size:
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(75));
// Eventually it reaches 100%:
meter.consume(Weight::from_parts(4, 0));
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(100));
// Saturating the second component won't change anything anymore:
meter.consume(Weight::from_parts(0, 5));
assert_eq!(meter.consumed_ratio(), Perbill::from_percent(100));``````
source

#### pub fn defensive_saturating_accrue(&mut self, w: Weight)

👎Deprecated: Use `consume` instead. Will be removed after December 2023.

Consume some weight and defensively fail if it is over the limit. Saturate in any case.

source

#### pub fn consume(&mut self, w: Weight)

Consume some weight and defensively fail if it is over the limit. Saturate in any case.

source

#### pub fn check_accrue(&mut self, w: Weight) -> bool

👎Deprecated: Use `try_consume` instead. Will be removed after December 2023.

Consume the given weight after checking that it can be consumed and return `true`. Otherwise do nothing and return `false`.

source

#### pub fn try_consume(&mut self, w: Weight) -> Result<(), ()>

Consume the given weight after checking that it can be consumed.

Returns `Ok` if the weight can be consumed or otherwise an `Err`.

source

#### pub fn can_accrue(&self, w: Weight) -> bool

👎Deprecated: Use `can_consume` instead. Will be removed after December 2023.

Check if the given weight can be consumed.

source

#### pub fn can_consume(&self, w: Weight) -> bool

Check if the given weight can be consumed.

## Trait Implementations§

source§

### impl Clone for WeightMeter

source§

#### fn clone(&self) -> WeightMeter

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from `source`. Read more
source§

### impl Debug for WeightMeter

source§

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

Formats the value using the given formatter. Read more

§

§

§

§

§

## Blanket Implementations§

source§

### impl<T> Any for Twhere T: 'static + ?Sized,

source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
source§

### impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

### impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

source§

source§

### impl<T> From<T> for T

const: unstable · source§

#### fn from(t: T) -> T

Returns the argument unchanged.

source§

### impl<T> Instrument for T

source§

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

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

#### 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 Twhere U: From<T>,

const: unstable · 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, Outer> IsWrappedBy<Outer> for Twhere Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

source§

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

Get a reference to the inner from the outer.

source§

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

Get a mutable reference to the inner from the outer.

§

### impl<T> Pointable for T

§

#### const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

#### type Init = T

The type for initializers.
§

#### unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

#### unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

#### unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

#### unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

### impl<T> Same<T> for T

§

#### type Output = T

Should always be `Self`
source§

### impl<T> SaturatedConversion for T

source§

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

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

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

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

### impl<T> ToOwned for Twhere T: Clone,

§

#### 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, U> TryFrom<U> for Twhere U: Into<T>,

§

#### type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

### impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

### impl<S, T> UncheckedInto<T> for Swhere T: UncheckedFrom<S>,

source§

#### fn unchecked_into(self) -> T

The counterpart to `unchecked_from`.
source§

### impl<T, S> UniqueSaturatedInto<T> for Swhere T: Bounded, S: TryInto<T>,

source§

#### fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of `T`.
§

§

source§

### impl<T> WithSubscriber for T

source§

#### 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
source§

#### fn with_current_subscriber(self) -> WithDispatch<Self>

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

§

source§