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§
sourcetype Value<'scale, 'resolver>
type Value<'scale, 'resolver>
The type of the value to hand back from the decode_with_visitor()
function.
sourcetype Error: From<DecodeError>
type Error: From<DecodeError>
The error type (which we must be able to convert a combination of Self
and DecodeError
s
into, to handle any internal errors that crop up trying to decode things).
sourcetype TypeResolver: TypeResolver
type TypeResolver: TypeResolver
The thing we’ll use to resolve type IDs into concrete types.
Provided Methods§
sourcefn 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 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.
sourcefn visit_unexpected<'scale, 'resolver>(
self,
unexpected: Unexpected,
) -> Result<Self::Value<'scale, 'resolver>, Self::Error>
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.
sourcefn visit_bool<'scale, 'resolver>(
self,
_value: bool,
_type_id: TypeIdFor<Self>,
) -> 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>
Called when a bool is seen in the input bytes.
sourcefn visit_char<'scale, 'resolver>(
self,
_value: char,
_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>
Called when a char is seen in the input bytes.
sourcefn visit_u8<'scale, 'resolver>(
self,
_value: u8,
_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>
Called when a u8 is seen in the input bytes.
sourcefn visit_u16<'scale, 'resolver>(
self,
_value: u16,
_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>
Called when a u16 is seen in the input bytes.
sourcefn visit_u32<'scale, 'resolver>(
self,
_value: u32,
_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>
Called when a u32 is seen in the input bytes.
sourcefn visit_u64<'scale, 'resolver>(
self,
_value: u64,
_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>
Called when a u64 is seen in the input bytes.
sourcefn visit_u128<'scale, 'resolver>(
self,
_value: u128,
_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>
Called when a u128 is seen in the input bytes.
sourcefn visit_u256<'resolver>(
self,
_value: &[u8; 32],
_type_id: TypeIdFor<Self>,
) -> Result<Self::Value<'_, 'resolver>, Self::Error>
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.
sourcefn visit_i8<'scale, 'resolver>(
self,
_value: i8,
_type_id: TypeIdFor<Self>,
) -> Result<Self::Value<'scale, 'resolver>, Self::Error>
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.
sourcefn visit_i16<'scale, 'resolver>(
self,
_value: i16,
_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>
Called when an i16 is seen in the input bytes.
sourcefn visit_i32<'scale, 'resolver>(
self,
_value: i32,
_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>
Called when an i32 is seen in the input bytes.
sourcefn visit_i64<'scale, 'resolver>(
self,
_value: i64,
_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>
Called when an i64 is seen in the input bytes.
sourcefn visit_i128<'scale, 'resolver>(
self,
_value: i128,
_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>
Called when an i128 is seen in the input bytes.
sourcefn visit_i256<'resolver>(
self,
_value: &[u8; 32],
_type_id: TypeIdFor<Self>,
) -> Result<Self::Value<'_, 'resolver>, Self::Error>
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.
sourcefn 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_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.
sourcefn 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_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.
sourcefn 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_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.
sourcefn visit_str<'scale, 'resolver>(
self,
_value: &mut Str<'scale>,
_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>
Called when a string value is seen in the input bytes.
sourcefn 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_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.
sourcefn 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_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.
sourcefn visit_bitsequence<'scale, 'resolver>(
self,
_value: &mut BitSequence<'scale>,
_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>
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.