fix(abigen): use event name from abi attribute (#2144)
* fix(abigen): use event name from abi attribute * rustfmt
This commit is contained in:
parent
85d7c07fa8
commit
e970f58a8a
|
@ -21,8 +21,6 @@ pub(crate) fn derive_eth_event_impl(input: DeriveInput) -> Result<TokenStream, E
|
|||
let name = &input.ident;
|
||||
let attributes = parse_event_attributes(&input)?;
|
||||
|
||||
let event_name = attributes.name.map(|(s, _)| s).unwrap_or_else(|| input.ident.to_string());
|
||||
|
||||
let mut event = if let Some((src, span)) = attributes.abi {
|
||||
// try to parse as a Solidity event
|
||||
match HumanReadableParser::parse_event(&src) {
|
||||
|
@ -55,7 +53,10 @@ pub(crate) fn derive_eth_event_impl(input: DeriveInput) -> Result<TokenStream, E
|
|||
derive_abi_event_from_fields(&input)
|
||||
}?;
|
||||
|
||||
event.name = event_name.clone();
|
||||
if let Some((attribute_name, _)) = attributes.name {
|
||||
event.name = attribute_name;
|
||||
}
|
||||
|
||||
if let Some((anon, _)) = attributes.anonymous.as_ref() {
|
||||
event.anonymous = *anon;
|
||||
}
|
||||
|
@ -71,6 +72,7 @@ pub(crate) fn derive_eth_event_impl(input: DeriveInput) -> Result<TokenStream, E
|
|||
};
|
||||
|
||||
let anon = attributes.anonymous.map(|(b, _)| b).unwrap_or_default();
|
||||
let event_name = &event.name;
|
||||
|
||||
let ethers_core = ethers_core_crate();
|
||||
let ethers_contract = ethers_contract_crate();
|
||||
|
@ -281,7 +283,7 @@ fn derive_decode_from_log_impl(
|
|||
/// Determine the event's ABI by parsing the AST
|
||||
fn derive_abi_event_from_fields(input: &DeriveInput) -> Result<Event, Error> {
|
||||
let event = Event {
|
||||
name: "".to_string(),
|
||||
name: input.ident.to_string(),
|
||||
inputs: utils::derive_abi_inputs_from_fields(input, "EthEvent")?
|
||||
.into_iter()
|
||||
.map(|(name, kind)| EventParam { name, kind, indexed: false })
|
||||
|
|
|
@ -647,3 +647,25 @@ fn can_use_human_readable_error() {
|
|||
|
||||
assert_etherror::<MyError>();
|
||||
}
|
||||
|
||||
// <https://github.com/gakonst/ethers-rs/issues/2142>
|
||||
#[test]
|
||||
fn derives_abi_name() {
|
||||
#[derive(Debug, EthEvent)]
|
||||
#[ethevent(abi = "Transfer(address,address,uint256)")]
|
||||
struct Erc20TransferEvent {
|
||||
#[ethevent(indexed, name = "_from")]
|
||||
from: Address,
|
||||
#[ethevent(indexed, name = "_to")]
|
||||
to: Address,
|
||||
#[ethevent(name = "_value")]
|
||||
value: U256,
|
||||
}
|
||||
|
||||
assert_eq!(Erc20TransferEvent::abi_signature(), "Transfer(address,address,uint256)");
|
||||
|
||||
assert_eq!(
|
||||
Erc20TransferEvent::signature(),
|
||||
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef".parse().unwrap()
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue