Enum alloy_dyn_abi::DynSolValue
source · pub enum DynSolValue {
Bool(bool),
Int(I256, usize),
Uint(U256, usize),
FixedBytes(Word, usize),
Address(Address),
Function(Function),
Bytes(Vec<u8>),
String(String),
Array(Vec<DynSolValue>),
FixedArray(Vec<DynSolValue>),
Tuple(Vec<DynSolValue>),
}
Expand description
A dynamic Solidity value.
It is broadly similar to serde_json::Value
in that it is an enum of
possible types, and the user must inspect and disambiguate.
§Examples
Basic usage:
use alloy_dyn_abi::{DynSolType, DynSolValue};
let ty: DynSolType = "uint64".parse()?;
let value: DynSolValue = 183u64.into();
let encoded: Vec<u8> = value.abi_encode();
let decoded: DynSolValue = ty.abi_decode(&encoded)?;
assert_eq!(decoded, value);
Coerce a string using DynSolType
:
use alloy_dyn_abi::{DynSolType, DynSolValue};
use alloy_primitives::U256;
let ty: DynSolType = "(string, uint256)".parse()?;
let value = ty.coerce_str("(foo bar, 2.5 gwei)")?;
assert_eq!(
value,
DynSolValue::Tuple(vec![
DynSolValue::String(String::from("foo bar")),
DynSolValue::Uint(U256::from(2_500_000_000u64), 256)
]),
);
Variants§
Bool(bool)
A boolean.
Int(I256, usize)
A signed integer. The second parameter is the number of bits, not bytes.
Uint(U256, usize)
An unsigned integer. The second parameter is the number of bits, not bytes.
FixedBytes(Word, usize)
A fixed-length byte array. The second parameter is the number of bytes.
Address(Address)
An address.
Function(Function)
A function pointer.
Bytes(Vec<u8>)
A dynamic-length byte array.
String(String)
A string.
Array(Vec<DynSolValue>)
A dynamically-sized array of values.
FixedArray(Vec<DynSolValue>)
A fixed-size array of values.
Tuple(Vec<DynSolValue>)
A tuple of values.
Implementations§
source§impl DynSolValue
impl DynSolValue
sourcepub fn as_type(&self) -> Option<DynSolType>
pub fn as_type(&self) -> Option<DynSolType>
The Solidity type. This returns the Solidity type corresponding to this
value, if it is known. A type will not be known if the value contains
an empty sequence, e.g. T[0]
.
sourcepub fn sol_type_name(&self) -> Option<Cow<'static, str>>
pub fn sol_type_name(&self) -> Option<Cow<'static, str>>
The Solidity type name. This returns the Solidity type corresponding to
this value, if it is known. A type will not be known if the value
contains an empty sequence, e.g. T[0]
.
sourcepub const fn is_word(&self) -> bool
pub const fn is_word(&self) -> bool
Trust if this value is encoded as a single word. False otherwise.
sourcepub fn as_word(&self) -> Option<Word>
pub fn as_word(&self) -> Option<Word>
Fallible cast to a single word. Will succeed for any single-word type.
sourcepub const fn as_address(&self) -> Option<Address>
pub const fn as_address(&self) -> Option<Address>
Fallible cast to the contents of a variant DynSolValue {.
sourcepub const fn as_fixed_bytes(&self) -> Option<(&[u8], usize)>
pub const fn as_fixed_bytes(&self) -> Option<(&[u8], usize)>
Fallible cast to the contents of a variant.
sourcepub const fn as_int(&self) -> Option<(I256, usize)>
pub const fn as_int(&self) -> Option<(I256, usize)>
Fallible cast to the contents of a variant.
sourcepub const fn as_uint(&self) -> Option<(U256, usize)>
pub const fn as_uint(&self) -> Option<(U256, usize)>
Fallible cast to the contents of a variant.
sourcepub fn as_fixed_array(&self) -> Option<&[Self]>
pub fn as_fixed_array(&self) -> Option<&[Self]>
Fallible cast to the contents of a variant.
sourcepub fn as_custom_struct(&self) -> Option<(&str, &[String], &[Self])>
pub fn as_custom_struct(&self) -> Option<(&str, &[String], &[Self])>
Fallible cast to the contents of a variant.
sourcepub fn has_custom_struct(&self) -> bool
pub fn has_custom_struct(&self) -> bool
Returns whether this type is contains a custom struct.
sourcepub const fn is_sequence(&self) -> bool
pub const fn is_sequence(&self) -> bool
Returns true if the value is a sequence type.
sourcepub fn as_fixed_seq(&self) -> Option<&[Self]>
pub fn as_fixed_seq(&self) -> Option<&[Self]>
Fallible cast to a fixed-size array. Any of a FixedArray
, a Tuple
,
or a CustomStruct
.
sourcepub fn as_packed_seq(&self) -> Option<&[u8]>
pub fn as_packed_seq(&self) -> Option<&[u8]>
Fallible cast to a packed sequence. Any of a String, or a Bytes.
sourcepub fn is_dynamic(&self) -> bool
pub fn is_dynamic(&self) -> bool
Returns true
if the value is an instance of a dynamically sized type.
sourcepub fn matches_many(values: &[Self], types: &[DynSolType]) -> bool
pub fn matches_many(values: &[Self], types: &[DynSolType]) -> bool
Check that these values have the same type as the given DynSolType
s.
See DynSolType::matches
for more information.
sourcepub fn matches(&self, ty: &DynSolType) -> bool
pub fn matches(&self, ty: &DynSolType) -> bool
Check that this value has the same type as the given DynSolType
.
See DynSolType::matches
for more information.
sourcepub fn head_append(&self, enc: &mut Encoder)
pub fn head_append(&self, enc: &mut Encoder)
Append this data to the head of an in-progress blob via the encoder.
sourcepub fn tail_append(&self, enc: &mut Encoder)
pub fn tail_append(&self, enc: &mut Encoder)
Append this data to the tail of an in-progress blob via the encoder.
sourcepub fn abi_encode_packed(&self) -> Vec<u8>
pub fn abi_encode_packed(&self) -> Vec<u8>
Non-standard Packed Mode ABI encoding.
Note that invalid value sizes will saturate to the maximum size, e.g. Uint(x, 300)
will
behave the same as Uint(x, 256)
.
See SolType::abi_encode_packed
for more
details.
sourcepub fn abi_encode_packed_to(&self, buf: &mut Vec<u8>)
pub fn abi_encode_packed_to(&self, buf: &mut Vec<u8>)
Non-standard Packed Mode ABI encoding.
See abi_encode_packed
for more details.
sourcepub fn abi_packed_encoded_size(&self) -> usize
pub fn abi_packed_encoded_size(&self) -> usize
Returns the length of this value when ABI-encoded in Non-standard Packed Mode.
See abi_encode_packed
for more details.
sourcepub fn abi_encode(&self) -> Vec<u8>
pub fn abi_encode(&self) -> Vec<u8>
Encode this value into a byte array by wrapping it into a 1-element sequence.
sourcepub fn abi_encode_params(&self) -> Vec<u8>
pub fn abi_encode_params(&self) -> Vec<u8>
Encode this value into a byte array suitable for passing to a function. If this value is a tuple, it is encoded as is. Otherwise, it is wrapped into a 1-element sequence.
§Examples
// Encoding for function foo(address)
DynSolValue::Address(_).abi_encode_params();
// Encoding for function foo(address, uint256)
DynSolValue::Tuple(vec![
DynSolValue::Address(_),
DynSolValue::Uint(_, 256),
]).abi_encode_params();
sourcepub fn abi_encode_sequence(&self) -> Option<Vec<u8>>
pub fn abi_encode_sequence(&self) -> Option<Vec<u8>>
If this value is a fixed sequence, encode it into a byte array. If this
value is not a fixed sequence, return None
.
Trait Implementations§
source§impl Clone for DynSolValue
impl Clone for DynSolValue
source§fn clone(&self) -> DynSolValue
fn clone(&self) -> DynSolValue
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for DynSolValue
impl Debug for DynSolValue
source§impl<const N: usize> From<[DynSolValue; N]> for DynSolValue
impl<const N: usize> From<[DynSolValue; N]> for DynSolValue
source§impl From<Address> for DynSolValue
impl From<Address> for DynSolValue
source§impl From<Signed<256, 4>> for DynSolValue
impl From<Signed<256, 4>> for DynSolValue
source§impl From<String> for DynSolValue
impl From<String> for DynSolValue
source§impl From<Uint<256, 4>> for DynSolValue
impl From<Uint<256, 4>> for DynSolValue
source§impl From<Vec<DynSolValue>> for DynSolValue
impl From<Vec<DynSolValue>> for DynSolValue
source§impl From<bool> for DynSolValue
impl From<bool> for DynSolValue
source§impl From<i128> for DynSolValue
impl From<i128> for DynSolValue
source§impl From<i16> for DynSolValue
impl From<i16> for DynSolValue
source§impl From<i32> for DynSolValue
impl From<i32> for DynSolValue
source§impl From<i64> for DynSolValue
impl From<i64> for DynSolValue
source§impl From<i8> for DynSolValue
impl From<i8> for DynSolValue
source§impl From<isize> for DynSolValue
impl From<isize> for DynSolValue
source§impl From<u128> for DynSolValue
impl From<u128> for DynSolValue
source§impl From<u16> for DynSolValue
impl From<u16> for DynSolValue
source§impl From<u32> for DynSolValue
impl From<u32> for DynSolValue
source§impl From<u64> for DynSolValue
impl From<u64> for DynSolValue
source§impl From<u8> for DynSolValue
impl From<u8> for DynSolValue
source§impl From<usize> for DynSolValue
impl From<usize> for DynSolValue
source§impl PartialEq for DynSolValue
impl PartialEq for DynSolValue
source§fn eq(&self, other: &DynSolValue) -> bool
fn eq(&self, other: &DynSolValue) -> bool
self
and other
values to be equal, and is used
by ==
.impl StructuralPartialEq for DynSolValue
Auto Trait Implementations§
impl Freeze for DynSolValue
impl RefUnwindSafe for DynSolValue
impl Send for DynSolValue
impl Sync for DynSolValue
impl Unpin for DynSolValue
impl UnwindSafe for DynSolValue
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)