fuels_rs::json_abi

Struct ABIParser

Source
pub struct ABIParser { /* private fields */ }

Implementations§

Source§

impl ABIParser

Source

pub fn new() -> Self

Source

pub fn encode( &mut self, abi: &str, fn_name: &str, values: &[String], ) -> Result<String, Error>

Higher-level layer of the ABI encoding module. Encode is essentially a wrapper of crate::abi_encoder, but it is responsible for parsing strings into proper Token that can be encoded by the crate::abi_encoder. Note that encode only encodes the parameters for an ABI call, It won’t include the function selector in it. To get the function selector, use encode_with_function_selector.

§Examples
use fuels_rs::json_abi::ABIParser;
let json_abi = r#"
    [
        {
            "type":"contract",
            "inputs":[
                {
                    "name":"arg",
                    "type":"u32"
                }
            ],
            "name":"takes_u32_returns_bool",
            "outputs":[
                {
                    "name":"",
                    "type":"bool"
                }
            ]
        }
    ]
    "#;

    let values: Vec<String> = vec!["10".to_string()];

    let mut abi = ABIParser::new();

    let function_name = "takes_u32_returns_bool";
    let encoded = abi.encode(json_abi, function_name, &values).unwrap();
    let expected_encode = "000000000000000a";
    assert_eq!(encoded, expected_encode);
Source

pub fn encode_with_function_selector( &mut self, abi: &str, fn_name: &str, values: &[String], ) -> Result<String, Error>

Similar to encode, but includes the function selector in the final encoded string.

§Examples
use fuels_rs::json_abi::ABIParser;
let json_abi = r#"
    [
        {
            "type":"contract",
            "inputs":[
                {
                    "name":"arg",
                    "type":"u32"
                }
            ],
            "name":"takes_u32_returns_bool",
            "outputs":[
                {
                    "name":"",
                    "type":"bool"
                }
            ]
        }
    ]
    "#;

    let values: Vec<String> = vec!["10".to_string()];

    let mut abi = ABIParser::new();
    let function_name = "takes_u32_returns_bool";

    let encoded = abi
        .encode_with_function_selector(json_abi, function_name, &values)
        .unwrap();

    let expected_encode = "000000006355e6ee000000000000000a";
    assert_eq!(encoded, expected_encode);
Source

pub fn get_encoded_function_selector(&self) -> String

Helper function to return the encoded function selector. It must already be encoded.

Source

pub fn encode_params(&self, params: &[String]) -> Result<String, Error>

Similar to encode, but it encodes only an array of strings containing [<type_1>, <param_1>, <type_2>, <param_2>, <type_n>, <param_n>] Without having to reference to a JSON specification of the ABI.

Source

pub fn parse_tokens<'a>( &self, params: &'a [(ParamType, &str)], ) -> Result<Vec<Token>, Error>

Helper function to turn a list of tuples(ParamType, &str) into a vector of Tokens ready to be encoded. Essentially a wrapper on tokenize.

Source

pub fn tokenize<'a>( &self, param: &ParamType, value: String, ) -> Result<Token, Error>

Takes a ParamType and a value string and joins them as a single Token that holds the value within it. This Token is used in the encoding process.

Source

pub fn tokenize_struct( &self, value: &str, params: &[ParamType], ) -> Result<Token, Error>

Creates a struct Token from an array of parameter types and a string of values. I.e. it takes a string containing values “value_1, value_2, value_3” and an array of ParamType containing the type of each value, in order: [ParamType::, ParamType::, ParamType::] And attempts to return a Token::Struct() containing the inner types. It works for nested/recursive structs.

Source

pub fn tokenize_array<'a>( &self, value: &'a str, param: &ParamType, ) -> Result<Token, Error>

Creates an enum Token from an array of parameter types and a string of values. I.e. it takes a string containing values “value_1, value_2, value_3” and an array of ParamType containing the type of each value, in order: [ParamType::, ParamType::, ParamType::] And attempts to return a Token::Enum() containing the inner types. It works for nested/recursive enums.

Source

pub fn decode<'a>( &self, abi: &str, fn_name: &str, value: &'a [u8], ) -> Result<Vec<Token>, Error>

Higher-level layer of the ABI decoding module. Decodes a value of a given ABI and a target function’s output. Note that the value has to be a byte array, meaning that the caller must properly cast the “upper” type into a &[u8],

Source

pub fn decode_params( &self, params: &[ParamType], data: &[u8], ) -> Result<Vec<Token>, Error>

Similar to decode, but it decodes only an array types and the encoded data without having to reference to a JSON specification of the ABI.

Source

pub fn build_fn_selector( &self, fn_name: &str, params: &[Property], ) -> Result<String, Error>

Builds a string representation of a function selector, i.e: <fn_name>(<type_1>, <type_2>, …, <type_n>)

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, U> FlattenInto<U> for T
where U: FlattenFrom<T>,

Source§

fn flatten_into(self) -> U

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

Source§

type Output = T

Should always be Self
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> 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> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T