sui_rpc/proto/sui/rpc/v2beta2/
events.rs1use super::*;
2use crate::field::FieldMaskTree;
3use crate::merge::Merge;
4use crate::proto::TryFromProtoError;
5
6impl From<sui_sdk_types::Event> for Event {
11 fn from(value: sui_sdk_types::Event) -> Self {
12 Self::merge_from(value, &FieldMaskTree::new_wildcard())
13 }
14}
15
16impl Merge<sui_sdk_types::Event> for Event {
17 fn merge(&mut self, source: sui_sdk_types::Event, mask: &FieldMaskTree) {
18 if mask.contains(Self::PACKAGE_ID_FIELD.name) {
19 self.package_id = Some(source.package_id.to_string());
20 }
21
22 if mask.contains(Self::MODULE_FIELD.name) {
23 self.module = Some(source.module.to_string());
24 }
25
26 if mask.contains(Self::SENDER_FIELD.name) {
27 self.sender = Some(source.sender.to_string());
28 }
29
30 if mask.contains(Self::EVENT_TYPE_FIELD.name) {
31 self.event_type = Some(source.type_.to_string());
32 }
33
34 if mask.contains(Self::CONTENTS_FIELD.name) {
35 self.contents = Some(Bcs {
36 name: Some(source.type_.to_string()),
37 value: Some(source.contents.into()),
38 });
39 }
40 }
41}
42
43impl Merge<&Event> for Event {
44 fn merge(&mut self, source: &Event, mask: &FieldMaskTree) {
45 let Event {
46 package_id,
47 module,
48 sender,
49 event_type,
50 contents,
51 json,
52 } = source;
53
54 if mask.contains(Self::PACKAGE_ID_FIELD.name) {
55 self.package_id = package_id.clone();
56 }
57
58 if mask.contains(Self::MODULE_FIELD.name) {
59 self.module = module.clone();
60 }
61
62 if mask.contains(Self::SENDER_FIELD.name) {
63 self.sender = sender.clone();
64 }
65
66 if mask.contains(Self::EVENT_TYPE_FIELD.name) {
67 self.event_type = event_type.clone();
68 }
69
70 if mask.contains(Self::CONTENTS_FIELD.name) {
71 self.contents = contents.clone();
72 }
73
74 if mask.contains(Self::JSON_FIELD.name) {
75 self.json = json.clone();
76 }
77 }
78}
79
80impl TryFrom<&Event> for sui_sdk_types::Event {
81 type Error = TryFromProtoError;
82
83 fn try_from(value: &Event) -> Result<Self, Self::Error> {
84 let package_id = value
85 .package_id
86 .as_ref()
87 .ok_or_else(|| TryFromProtoError::missing("package_id"))?
88 .parse()
89 .map_err(|e| TryFromProtoError::invalid(Event::PACKAGE_ID_FIELD, e))?;
90
91 let module = value
92 .module
93 .as_ref()
94 .ok_or_else(|| TryFromProtoError::missing("module"))?
95 .parse()
96 .map_err(|e| TryFromProtoError::invalid(Event::MODULE_FIELD, e))?;
97
98 let sender = value
99 .sender
100 .as_ref()
101 .ok_or_else(|| TryFromProtoError::missing("sender"))?
102 .parse()
103 .map_err(|e| TryFromProtoError::invalid(Event::SENDER_FIELD, e))?;
104
105 let type_ = value
106 .event_type
107 .as_ref()
108 .ok_or_else(|| TryFromProtoError::missing("event_type"))?
109 .parse()
110 .map_err(|e| TryFromProtoError::invalid(Event::EVENT_TYPE_FIELD, e))?;
111
112 let contents = value
113 .contents
114 .as_ref()
115 .ok_or_else(|| TryFromProtoError::missing("contents"))?
116 .value()
117 .to_vec();
118
119 Ok(Self {
120 package_id,
121 module,
122 sender,
123 type_,
124 contents,
125 })
126 }
127}
128
129impl From<sui_sdk_types::TransactionEvents> for TransactionEvents {
134 fn from(value: sui_sdk_types::TransactionEvents) -> Self {
135 Self::merge_from(value, &FieldMaskTree::new_wildcard())
136 }
137}
138
139impl Merge<sui_sdk_types::TransactionEvents> for TransactionEvents {
140 fn merge(&mut self, source: sui_sdk_types::TransactionEvents, mask: &FieldMaskTree) {
141 if mask.contains(Self::BCS_FIELD.name) {
142 let mut bcs = super::Bcs::serialize(&source).unwrap();
143 bcs.name = Some("TransactionEvents".to_owned());
144 self.bcs = Some(bcs);
145 }
146
147 if mask.contains(Self::DIGEST_FIELD.name) {
148 self.digest = Some(source.digest().to_string());
149 }
150
151 if let Some(events_mask) = mask.subtree(Self::EVENTS_FIELD.name) {
152 self.events = source
153 .0
154 .into_iter()
155 .map(|event| Event::merge_from(event, &events_mask))
156 .collect();
157 }
158 }
159}
160
161impl Merge<&TransactionEvents> for TransactionEvents {
162 fn merge(&mut self, source: &TransactionEvents, mask: &FieldMaskTree) {
163 let TransactionEvents {
164 bcs,
165 digest,
166 events,
167 } = source;
168
169 if mask.contains(Self::BCS_FIELD.name) {
170 self.bcs = bcs.clone();
171 }
172
173 if mask.contains(Self::DIGEST_FIELD.name) {
174 self.digest = digest.clone();
175 }
176
177 if let Some(events_mask) = mask.subtree(Self::EVENTS_FIELD.name) {
178 self.events = events
179 .iter()
180 .map(|event| Event::merge_from(event, &events_mask))
181 .collect();
182 }
183 }
184}
185
186impl TryFrom<&TransactionEvents> for sui_sdk_types::TransactionEvents {
187 type Error = TryFromProtoError;
188
189 fn try_from(value: &TransactionEvents) -> Result<Self, Self::Error> {
190 Ok(Self(
191 value
192 .events
193 .iter()
194 .map(TryInto::try_into)
195 .collect::<Result<_, _>>()?,
196 ))
197 }
198}