pub struct ABIParser { /* private fields */ }
Implementations§
Source§impl ABIParser
impl ABIParser
pub fn new() -> Self
Sourcepub fn encode(
&mut self,
abi: &str,
fn_name: &str,
values: &[String],
) -> Result<String, Error>
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);
Sourcepub fn encode_with_function_selector(
&mut self,
abi: &str,
fn_name: &str,
values: &[String],
) -> Result<String, Error>
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);
Sourcepub fn get_encoded_function_selector(&self) -> String
pub fn get_encoded_function_selector(&self) -> String
Helper function to return the encoded function selector. It must already be encoded.
Sourcepub fn encode_params(&self, params: &[String]) -> Result<String, Error>
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.
Sourcepub fn parse_tokens<'a>(
&self,
params: &'a [(ParamType, &str)],
) -> Result<Vec<Token>, Error>
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
.
Sourcepub fn tokenize<'a>(
&self,
param: &ParamType,
value: String,
) -> Result<Token, Error>
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.
Sourcepub fn tokenize_struct(
&self,
value: &str,
params: &[ParamType],
) -> Result<Token, Error>
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::Token::Struct()
containing the inner types.
It works for nested/recursive structs.
Sourcepub fn tokenize_array<'a>(
&self,
value: &'a str,
param: &ParamType,
) -> Result<Token, Error>
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::Token::Enum()
containing the inner types.
It works for nested/recursive enums.
Sourcepub fn decode<'a>(
&self,
abi: &str,
fn_name: &str,
value: &'a [u8],
) -> Result<Vec<Token>, Error>
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]
,
Auto Trait Implementations§
impl Freeze for ABIParser
impl RefUnwindSafe for ABIParser
impl Send for ABIParser
impl Sync for ABIParser
impl Unpin for ABIParser
impl UnwindSafe for ABIParser
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, U> FlattenInto<U> for Twhere
U: FlattenFrom<T>,
impl<T, U> FlattenInto<U> for Twhere
U: FlattenFrom<T>,
fn flatten_into(self) -> U
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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