scale_decode::visitor

Trait Visitor

source
pub trait Visitor: Sized {
    type Value<'scale, 'resolver>;
    type Error: From<DecodeError>;
    type TypeResolver: TypeResolver;

Show 23 methods // Provided methods fn unchecked_decode_as_type<'scale, 'resolver>( self, _input: &mut &'scale [u8], _type_id: TypeIdFor<Self>, _types: &'resolver Self::TypeResolver, ) -> DecodeAsTypeResult<Self, Result<Self::Value<'scale, 'resolver>, Self::Error>> { ... } fn visit_unexpected<'scale, 'resolver>( self, unexpected: Unexpected, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_bool<'scale, 'resolver>( self, _value: bool, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_char<'scale, 'resolver>( self, _value: char, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_u8<'scale, 'resolver>( self, _value: u8, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_u16<'scale, 'resolver>( self, _value: u16, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_u32<'scale, 'resolver>( self, _value: u32, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_u64<'scale, 'resolver>( self, _value: u64, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_u128<'scale, 'resolver>( self, _value: u128, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_u256<'resolver>( self, _value: &[u8; 32], _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'_, 'resolver>, Self::Error> { ... } fn visit_i8<'scale, 'resolver>( self, _value: i8, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_i16<'scale, 'resolver>( self, _value: i16, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_i32<'scale, 'resolver>( self, _value: i32, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_i64<'scale, 'resolver>( self, _value: i64, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_i128<'scale, 'resolver>( self, _value: i128, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_i256<'resolver>( self, _value: &[u8; 32], _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'_, 'resolver>, Self::Error> { ... } fn visit_sequence<'scale, 'resolver>( self, _value: &mut Sequence<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_composite<'scale, 'resolver>( self, _value: &mut Composite<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_tuple<'scale, 'resolver>( self, _value: &mut Tuple<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_str<'scale, 'resolver>( self, _value: &mut Str<'scale>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_variant<'scale, 'resolver>( self, _value: &mut Variant<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_array<'scale, 'resolver>( self, _value: &mut Array<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... } fn visit_bitsequence<'scale, 'resolver>( self, _value: &mut BitSequence<'scale>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error> { ... }
}
Expand description

An implementation of the Visitor trait can be passed to the decode_with_visitor() function, and is handed back values as they are encountered. It’s up to the implementation to decide what to do with these values.

Required Associated Types§

source

type Value<'scale, 'resolver>

The type of the value to hand back from the decode_with_visitor() function.

source

type Error: From<DecodeError>

The error type (which we must be able to convert a combination of Self and DecodeErrors into, to handle any internal errors that crop up trying to decode things).

source

type TypeResolver: TypeResolver

The thing we’ll use to resolve type IDs into concrete types.

Provided Methods§

source

fn unchecked_decode_as_type<'scale, 'resolver>( self, _input: &mut &'scale [u8], _type_id: TypeIdFor<Self>, _types: &'resolver Self::TypeResolver, ) -> DecodeAsTypeResult<Self, Result<Self::Value<'scale, 'resolver>, Self::Error>>

This method is called immediately upon running decode_with_visitor(). By default we ignore this call and return our visitor back (ie [DecodeAsTypeResult::Skipped(visitor)]). If you choose to do some decoding at this stage, return [DecodeAsTypeResult::Decoded(result)]. In either case, any bytes that you consume from the input (by altering what it points to) will be consumed for any subsequent visiting.

§Warning

Unlike the other visit_* methods, it is completely up to the implementor to decode and advance the bytes in a sensible way, and thus also possible for the implementor to screw this up. As a result, it’s suggested that you don’t implement this unless you know what you’re doing.

source

fn visit_unexpected<'scale, 'resolver>( self, unexpected: Unexpected, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

This is called when a visitor function that you’ve not provided an implementation is called. You are provided an enum value corresponding to the function call, and can decide what to return in this case. The default is to return an error to announce the unexpected value.

source

fn visit_bool<'scale, 'resolver>( self, _value: bool, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a bool is seen in the input bytes.

source

fn visit_char<'scale, 'resolver>( self, _value: char, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a char is seen in the input bytes.

source

fn visit_u8<'scale, 'resolver>( self, _value: u8, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a u8 is seen in the input bytes.

source

fn visit_u16<'scale, 'resolver>( self, _value: u16, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a u16 is seen in the input bytes.

source

fn visit_u32<'scale, 'resolver>( self, _value: u32, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a u32 is seen in the input bytes.

source

fn visit_u64<'scale, 'resolver>( self, _value: u64, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a u64 is seen in the input bytes.

source

fn visit_u128<'scale, 'resolver>( self, _value: u128, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a u128 is seen in the input bytes.

source

fn visit_u256<'resolver>( self, _value: &[u8; 32], _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'_, 'resolver>, Self::Error>

Called when a u256 is seen in the input bytes.

source

fn visit_i8<'scale, 'resolver>( self, _value: i8, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when an i8 is seen in the input bytes.

source

fn visit_i16<'scale, 'resolver>( self, _value: i16, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when an i16 is seen in the input bytes.

source

fn visit_i32<'scale, 'resolver>( self, _value: i32, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when an i32 is seen in the input bytes.

source

fn visit_i64<'scale, 'resolver>( self, _value: i64, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when an i64 is seen in the input bytes.

source

fn visit_i128<'scale, 'resolver>( self, _value: i128, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when an i128 is seen in the input bytes.

source

fn visit_i256<'resolver>( self, _value: &[u8; 32], _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'_, 'resolver>, Self::Error>

Called when an i256 is seen in the input bytes.

source

fn visit_sequence<'scale, 'resolver>( self, _value: &mut Sequence<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a sequence of values is seen in the input bytes.

source

fn visit_composite<'scale, 'resolver>( self, _value: &mut Composite<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a composite value is seen in the input bytes.

source

fn visit_tuple<'scale, 'resolver>( self, _value: &mut Tuple<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a tuple of values is seen in the input bytes.

source

fn visit_str<'scale, 'resolver>( self, _value: &mut Str<'scale>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a string value is seen in the input bytes.

source

fn visit_variant<'scale, 'resolver>( self, _value: &mut Variant<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a variant is seen in the input bytes.

source

fn visit_array<'scale, 'resolver>( self, _value: &mut Array<'scale, 'resolver, Self::TypeResolver>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when an array is seen in the input bytes.

source

fn visit_bitsequence<'scale, 'resolver>( self, _value: &mut BitSequence<'scale>, _type_id: TypeIdFor<Self>, ) -> Result<Self::Value<'scale, 'resolver>, Self::Error>

Called when a bit sequence is seen in the input bytes.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

source§

impl<R: TypeResolver> Visitor for IgnoreVisitor<R>

source§

type Value<'scale, 'resolver> = ()

source§

type Error = DecodeError

source§

type TypeResolver = R

source§

impl<V: Visitor> Visitor for VisitorWithCrateError<V>
where V::Error: Into<Error>,

source§

type Value<'scale, 'resolver> = <V as Visitor>::Value<'scale, 'resolver>

source§

type Error = Error

source§

type TypeResolver = <V as Visitor>::TypeResolver