multiversx_sc::hex_call_data

Struct HexCallDataDeserializer

Source
pub struct HexCallDataDeserializer<'a> { /* private fields */ }
Expand description

Deserializes from the MultiversX smart contract call format.

This format consists of the function name, followed by ‘@’, follwed by hex-encoded argument bytes separated by ‘@’ characters. Example: “funcName@00000@aaaa@1234@@”. Arguments can be empty. Argument hex encodings must always have an even number of digits.

HexCallDataDeserializer borrows its input and will allocate new Vecs for each output.

Converting from bytes to specific argument types is not in scope. The TopDecodeMulti trait deals with that.

Currently not used anywhere in the framework, but the functionality is available for anyone who needs it.

Implementations§

Source§

impl<'a> HexCallDataDeserializer<'a>

Source

pub fn new(source: &'a [u8]) -> Self

Source

pub fn get_func_name(&self) -> &'a [u8]

Gets the first component of the call data, which is the function name. Unlike the arguments, this can be called at any time.

Source

pub fn has_next(&self) -> bool

Source

pub fn next_argument(&mut self) -> Result<Option<Vec<u8>>, &'static str>

Gets the next argument, deserializes from hex and returns the resulting bytes.

Trait Implementations§

Source§

impl TopDecodeMultiInput for HexCallDataDeserializer<'_>

Source§

type ValueInput = Box<[u8]>

Source§

fn has_next(&self) -> bool

Check if there are more arguments that can be loaded.
Source§

fn next_value_input<H>( &mut self, h: H, ) -> Result<Self::ValueInput, H::HandledErr>

Retrieves an input for deserializing an argument. If the loader is out of arguments, it will crash by itself with an appropriate error, without returning. Use if the next argument is optional, use has_next beforehand.
Source§

fn next_value<T, H>( &mut self, h: H, ) -> Result<T, <H as DecodeErrorHandler>::HandledErr>

Source§

fn assert_no_more_args<H>( &self, h: H, ) -> Result<(), <H as DecodeErrorHandler>::HandledErr>

Called after retrieving all arguments to validate that extra arguments were not provided.
Source§

fn flush_ignore<H>( &mut self, h: H, ) -> Result<(), <H as DecodeErrorHandler>::HandledErr>

Consumes all inputs and ignores them. After executing this, assert_no_more_args should not fail.

Auto Trait Implementations§

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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