Struct Value

Source
pub struct Value<T = ()> {
    pub value: ValueDef<T>,
    pub context: T,
}
Expand description

Value holds a representation of some value that has been decoded, as well as some arbitrary context.

Not all SCALE encoded types have an similar-named value; for instance, the values corresponding to sequence, array and composite types can all be represented with Composite. Only enough information is preserved here to to be able to encode and decode SCALE bytes with a known type to and from Values losslessly.

Fields§

§value: ValueDef<T>

The shape and associated data for this Value

§context: T

Some additional arbitrary context that can be associated with a value.

Implementations§

Source§

impl Value

Source

pub fn named_composite<S, Vals>(vals: Vals) -> Value
where S: Into<String>, Vals: IntoIterator<Item = (S, Value)>,

Construct a named composite type from any type which produces a tuple of keys and values when iterated over.

Source

pub fn unnamed_composite<Vals>(vals: Vals) -> Value
where Vals: IntoIterator<Item = Value>,

Construct an unnamed composite type from any type which produces values when iterated over.

Source

pub fn variant<S>(name: S, values: Composite<()>) -> Value
where S: Into<String>,

Create a new variant value without additional context.

Source

pub fn named_variant<S, F, Vals>(name: S, fields: Vals) -> Value
where S: Into<String>, F: Into<String>, Vals: IntoIterator<Item = (F, Value)>,

Create a new variant value with named fields and without additional context.

Source

pub fn unnamed_variant<S, Vals>(name: S, fields: Vals) -> Value
where S: Into<String>, Vals: IntoIterator<Item = Value>,

Create a new variant value with tuple-like fields and without additional context.

Source

pub fn bit_sequence(bits: Bits) -> Value

Create a new bit sequence value without additional context.

Source

pub fn primitive(primitive: Primitive) -> Value

Create a new primitive value without additional context.

Source

pub fn string<S>(val: S) -> Value
where S: Into<String>,

Create a new string value without additional context.

Source

pub fn bool(val: bool) -> Value

Create a new boolean value without additional context.

Source

pub fn char(val: char) -> Value

Create a new char without additional context.

Source

pub fn u128(val: u128) -> Value

Create a new unsigned integer without additional context.

Source

pub fn i128(val: i128) -> Value

Create a new signed integer without additional context.

Source

pub fn from_bytes(bytes: impl AsRef<[u8]>) -> Value

Create a new Value from a set of bytes; useful for converting things like AccountIds.

Source§

impl Value

Source

pub fn without_context(value: ValueDef<()>) -> Value

Create a new value with no associated context.

Source§

impl<T> Value<T>

Source

pub fn with_context(value: ValueDef<T>, context: T) -> Value<T>

Create a new value with some associated context.

Source

pub fn remove_context(self) -> Value

Remove the context.

Source

pub fn map_context<F, U>(self, f: F) -> Value<U>
where F: Clone + FnMut(T) -> U,

Map the context to some different type.

Source

pub fn as_bool(&self) -> Option<bool>

If the value is a boolean value, return it.

Source

pub fn as_char(&self) -> Option<char>

If the value is a char, return it.

Source

pub fn as_u128(&self) -> Option<u128>

If the value is a u128, return it.

Source

pub fn as_i128(&self) -> Option<i128>

If the value is an i128, return it.

Source

pub fn as_str(&self) -> Option<&str>

If the value is a string, return it.

Trait Implementations§

Source§

impl<Ctx> At<Ctx> for Value<Ctx>

Source§

fn at<L>(&self, loc: L) -> Option<&Value<Ctx>>
where L: AsLocation,

Index into a value, returning a reference to the value if one exists, or None if not.
Source§

impl<T> Clone for Value<T>
where T: Clone,

Source§

fn clone(&self) -> Value<T>

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<T> Debug for Value<T>
where T: Debug,

Source§

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

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

impl<T> Display for Value<T>

Source§

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

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

impl<T> EncodeAsFields for Value<T>

Source§

fn encode_as_fields_to<R>( &self, fields: &mut dyn FieldIter<'_, <R as TypeResolver>::TypeId, Item = Field<'_, <R as TypeResolver>::TypeId>>, types: &R, out: &mut Vec<u8>, ) -> Result<(), Error>
where R: TypeResolver,

Given some fields describing the shape of a type, attempt to encode to that shape.
Source§

fn encode_as_fields<R>( &self, fields: &mut dyn FieldIter<'_, <R as TypeResolver>::TypeId, Item = Field<'_, <R as TypeResolver>::TypeId>>, types: &R, ) -> Result<Vec<u8>, Error>
where R: TypeResolver,

This is a helper function which internally calls EncodeAsFields::encode_as_fields_to. Prefer to implement that instead.
Source§

impl<T> EncodeAsType for Value<T>

Source§

fn encode_as_type_to<R>( &self, type_id: <R as TypeResolver>::TypeId, types: &R, out: &mut Vec<u8>, ) -> Result<(), Error>
where R: TypeResolver,

Given some type_id, types, a context and some output target for the SCALE encoded bytes, attempt to SCALE encode the current value into the type given by type_id.
Source§

fn encode_as_type<R>( &self, type_id: <R as TypeResolver>::TypeId, types: &R, ) -> Result<Vec<u8>, Error>
where R: TypeResolver,

This is a helper function which internally calls EncodeAsType::encode_as_type_to. Prefer to implement that instead.
Source§

impl From<&str> for Value

Source§

fn from(val: &str) -> Value

Converts to this type from the input type.
Source§

impl From<Bits> for Value

Source§

fn from(val: Bits) -> Value

Converts to this type from the input type.
Source§

impl From<Composite<()>> for Value

Source§

fn from(val: Composite<()>) -> Value

Converts to this type from the input type.
Source§

impl From<String> for Value

Source§

fn from(val: String) -> Value

Converts to this type from the input type.
Source§

impl From<Variant<()>> for Value

Source§

fn from(val: Variant<()>) -> Value

Converts to this type from the input type.
Source§

impl<K, V> From<Vec<(K, V)>> for Value
where K: Into<String>, V: Into<Value>,

Source§

fn from(vals: Vec<(K, V)>) -> Value

Converts to this type from the input type.
Source§

impl<V> From<Vec<V>> for Value
where V: Into<Value>,

Source§

fn from(vals: Vec<V>) -> Value

Converts to this type from the input type.
Source§

impl From<bool> for Value

Source§

fn from(val: bool) -> Value

Converts to this type from the input type.
Source§

impl From<char> for Value

Source§

fn from(val: char) -> Value

Converts to this type from the input type.
Source§

impl From<i128> for Value

Source§

fn from(val: i128) -> Value

Converts to this type from the input type.
Source§

impl From<i16> for Value

Source§

fn from(val: i16) -> Value

Converts to this type from the input type.
Source§

impl From<i32> for Value

Source§

fn from(val: i32) -> Value

Converts to this type from the input type.
Source§

impl From<i64> for Value

Source§

fn from(val: i64) -> Value

Converts to this type from the input type.
Source§

impl From<i8> for Value

Source§

fn from(val: i8) -> Value

Converts to this type from the input type.
Source§

impl From<isize> for Value

Source§

fn from(val: isize) -> Value

Converts to this type from the input type.
Source§

impl From<u128> for Value

Source§

fn from(val: u128) -> Value

Converts to this type from the input type.
Source§

impl From<u16> for Value

Source§

fn from(val: u16) -> Value

Converts to this type from the input type.
Source§

impl From<u32> for Value

Source§

fn from(val: u32) -> Value

Converts to this type from the input type.
Source§

impl From<u64> for Value

Source§

fn from(val: u64) -> Value

Converts to this type from the input type.
Source§

impl From<u8> for Value

Source§

fn from(val: u8) -> Value

Converts to this type from the input type.
Source§

impl From<usize> for Value

Source§

fn from(val: usize) -> Value

Converts to this type from the input type.
Source§

impl IntoVisitor for Value

Source§

type AnyVisitor<R: TypeResolver> = VisitorWithCrateError<DecodeValueVisitor<R, EmptyContext>>

The visitor type used to decode SCALE encoded bytes to Self.
Source§

fn into_visitor<R>() -> <Value as IntoVisitor>::AnyVisitor<R>
where R: TypeResolver,

A means of obtaining this visitor.
Source§

impl<T> PartialEq for Value<T>
where T: PartialEq,

Source§

fn eq(&self, other: &Value<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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<T> Eq for Value<T>
where T: Eq,

Source§

impl<T> StructuralPartialEq for Value<T>

Auto Trait Implementations§

§

impl<T> Freeze for Value<T>
where T: Freeze,

§

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

§

impl<T> Send for Value<T>
where T: Send,

§

impl<T> Sync for Value<T>
where T: Sync,

§

impl<T> Unpin for Value<T>
where T: Unpin,

§

impl<T> UnwindSafe for Value<T>
where T: 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
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> Conv for T

Source§

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

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

impl<T> DecodeAsType for T
where T: IntoVisitor,

Source§

fn decode_as_type_maybe_compact<R>( input: &mut &[u8], type_id: <R as TypeResolver>::TypeId, types: &R, is_compact: bool, ) -> Result<T, Error>
where R: TypeResolver,

Source§

fn decode_as_type<R>( input: &mut &[u8], type_id: <R as TypeResolver>::TypeId, types: &R, ) -> Result<Self, Error>
where R: TypeResolver,

Given some input bytes, a type_id, and type registry, attempt to decode said bytes into Self. Implementations should modify the &mut reference to the bytes such that any bytes not used in the course of decoding are still pointed to after decoding is complete.
Source§

impl<T> DecodeWithMetadata for T
where T: DecodeAsType,

Source§

fn decode_with_metadata( bytes: &mut &[u8], type_id: u32, metadata: &Metadata, ) -> Result<T, Error>

Given some metadata and a type ID, attempt to SCALE decode the provided bytes into Self.
Source§

impl<T> EncodeWithMetadata for T
where T: EncodeAsType,

Source§

fn encode_with_metadata( &self, type_id: u32, metadata: &Metadata, bytes: &mut Vec<u8>, ) -> Result<(), Error>

SCALE encode this type to bytes, possibly with the help of metadata.

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> FmtForward for T

Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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

Source§

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

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

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

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

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

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

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

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

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

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

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

Immutable access to a value. Read more
Source§

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

Mutable access to a value. Read more
Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.
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> TryConv for T

Source§

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

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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§

impl<T> JsonSchemaMaybe for T