fn convert_event(
event: EventIR,
struct_types: &[StructTypeMetadata],
enum_types: &[EnumTypeMetadata],
contract_types: &[String],
type_aliases: &std::collections::HashMap<String, String>,
) -> EventMetadata {
let normalized = normalize_event_signature(&event.name, &event.parameters);
EventMetadata {
name: event.name,
normalized_name: normalized,
parameters: event
.parameters
.into_iter()
.map(|param| {
let ty = param.ty;
let neo_type = NeoType::from_solidity_with_aliases(
&ty,
struct_types,
enum_types,
contract_types,
type_aliases,
)
.ok();
EventParameter {
name: param.name,
ty,
indexed: param.indexed,
neo_type,
}
})
.collect(),
anonymous: event.anonymous,
}
}
fn normalize_event_signature(name: &str, params: &[crate::frontend::EventParameterIR]) -> String {
fn canonical_param_type(ty: &str) -> String {
let mut parts = ty.split_whitespace();
match parts.next() {
Some("struct" | "enum") => parts.next().unwrap_or_default().to_string(),
Some(first) => first.to_string(),
None => String::new(),
}
}
let base = name.trim().to_ascii_lowercase();
let param_types: Vec<String> = params
.iter()
.map(|param| canonical_param_type(¶m.ty).to_ascii_lowercase())
.collect();
if param_types.is_empty() {
format!("{base}()")
} else {
format!("{base}({})", param_types.join(","))
}
}