starknet_abigen_parser_stopgap/
cairo_event.rs1use starknet::core::types::contract::{AbiEvent, AbiNamedMember, EventFieldKind, TypedAbiEvent};
3
4use super::abi_types::{AbiType, AbiTypeAny};
5use super::{CairoEnum, CairoStruct};
6
7#[derive(Debug, Clone)]
8pub enum CairoEventInner {
9 Enum(CairoEnum),
10 Struct(CairoStruct),
11}
12
13#[derive(Debug, Clone)]
14pub struct CairoEvent {
15 pub abi: AbiTypeAny,
16 pub inner: CairoEventInner,
17 pub fields_kinds: Vec<EventFieldKind>,
18}
19
20impl CairoEvent {
21 pub fn get_name(&self) -> String {
23 self.abi.get_cairo_type_name()
24 }
25
26 pub fn count_fields_kinds(&self) -> (usize, usize) {
28 let mut k = 0;
29 let mut d = 0;
30
31 for fk in &self.fields_kinds {
32 match fk {
33 EventFieldKind::Key => k += 1,
34 EventFieldKind::Data => d += 1,
35 _ => continue,
36 }
37 }
38
39 (k, d)
40 }
41
42 pub fn new(abi_event: &AbiEvent) -> Option<CairoEvent> {
44 match abi_event {
45 AbiEvent::Typed(typed_e) => match typed_e {
46 TypedAbiEvent::Struct(s) => {
47 if s.members.is_empty() {
48 return None;
49 }
50
51 let name = &s.name;
52 let mut kinds = vec![];
53 let members = s
54 .members
55 .iter()
56 .map(|m| {
57 kinds.push(m.kind.clone());
58 AbiNamedMember {
59 name: m.name.clone(),
60 r#type: m.r#type.clone(),
61 }
62 })
63 .collect();
64
65 let cs = CairoStruct::new(name, &members);
66
67 Some(CairoEvent {
68 abi: AbiTypeAny::from_string(name),
69 inner: CairoEventInner::Struct(cs),
70 fields_kinds: kinds,
71 })
72 }
73 TypedAbiEvent::Enum(e) => {
74 if e.variants.is_empty() {
75 return None;
76 }
77
78 let name = &e.name;
79 let mut kinds = vec![];
80 let variants = e
81 .variants
82 .iter()
83 .map(|v| {
84 kinds.push(v.kind.clone());
85 AbiNamedMember {
86 name: v.name.clone(),
87 r#type: v.r#type.clone(),
88 }
89 })
90 .collect();
91
92 let ce = CairoEnum::new(name, &variants);
93
94 Some(CairoEvent {
95 abi: AbiTypeAny::from_string(name),
96 inner: CairoEventInner::Enum(ce),
97 fields_kinds: kinds,
98 })
99 }
100 },
101 AbiEvent::Untyped(_) => {
102 None
105 }
106 }
107 }
108}