xmtp_api_d14n/protocol/impls/
envelope_visitor.rs1use crate::protocol::{EnvelopeError, EnvelopeVisitor};
8use impl_trait_for_tuples::impl_for_tuples;
9use xmtp_proto::identity_v1::get_identity_updates_request;
10use xmtp_proto::identity_v1::get_identity_updates_response::IdentityUpdateLog;
11use xmtp_proto::mls_v1::fetch_key_packages_response::KeyPackage;
12use xmtp_proto::mls_v1::subscribe_group_messages_request::Filter as SubscribeGroupMessagesFilter;
13use xmtp_proto::mls_v1::subscribe_welcome_messages_request::Filter as SubscribeWelcomeMessagesFilter;
14use xmtp_proto::xmtp::identity::associations::IdentityUpdate;
15use xmtp_proto::xmtp::mls::api::v1::GroupMessageInput;
16use xmtp_proto::xmtp::mls::api::v1::UploadKeyPackageRequest;
17use xmtp_proto::xmtp::mls::api::v1::WelcomeMessageInput;
18use xmtp_proto::xmtp::mls::api::v1::{
19 group_message::V1 as V3GroupMessage, welcome_message::V1 as V3WelcomeMessage,
20};
21use xmtp_proto::xmtp::mls::api::v1::{
22 group_message_input::{V1 as GroupMessageV1, Version as GroupMessageVersion},
23 welcome_message_input::{V1 as WelcomeMessageV1, Version as WelcomeMessageVersion},
24};
25use xmtp_proto::xmtp::xmtpv4::envelopes::{
26 ClientEnvelope, OriginatorEnvelope, PayerEnvelope, UnsignedOriginatorEnvelope,
27};
28use xmtp_proto::xmtp::xmtpv4::message_api::get_newest_envelope_response;
29
30type ForError<'a, V> = <V as EnvelopeVisitor<'a>>::Error;
31
32#[impl_for_tuples(1, 6)]
33impl<'a> EnvelopeVisitor<'a> for Tuple {
34 type Error = EnvelopeError;
35
36 for_tuples!( where #( EnvelopeError: From<ForError<'a, Tuple>> )* );
37
38 fn visit_originator(&mut self, envelope: &OriginatorEnvelope) -> Result<(), Self::Error> {
39 for_tuples!( #( Tuple.visit_originator(envelope)?; )* );
40 Ok(())
41 }
42
43 fn visit_unsigned_originator(
44 &mut self,
45 e: &UnsignedOriginatorEnvelope,
46 ) -> Result<(), Self::Error> {
47 for_tuples!( #( Tuple.visit_unsigned_originator(e)?; )* );
48 Ok(())
49 }
50
51 fn visit_payer(&mut self, e: &PayerEnvelope) -> Result<(), Self::Error> {
52 for_tuples!( #( Tuple.visit_payer(e)?; )* );
53 Ok(())
54 }
55
56 fn visit_client(&mut self, e: &ClientEnvelope) -> Result<(), Self::Error> {
57 for_tuples!( #( Tuple.visit_client(e)?; )* );
58 Ok(())
59 }
60
61 fn visit_group_message_version(&mut self, m: &GroupMessageVersion) -> Result<(), Self::Error> {
62 for_tuples!( #( Tuple.visit_group_message_version(m)?; )* );
63 Ok(())
64 }
65
66 fn visit_group_message_input(&mut self, m: &GroupMessageInput) -> Result<(), Self::Error> {
67 for_tuples!( #( Tuple.visit_group_message_input(m)?; )* );
68 Ok(())
69 }
70
71 fn visit_group_message_v1(&mut self, m: &GroupMessageV1) -> Result<(), Self::Error> {
72 for_tuples!( #( Tuple.visit_group_message_v1(m)?; )* );
73 Ok(())
74 }
75
76 fn visit_welcome_message_version(
77 &mut self,
78 m: &WelcomeMessageVersion,
79 ) -> Result<(), Self::Error> {
80 for_tuples!( #( Tuple.visit_welcome_message_version(m)?; )* );
81 Ok(())
82 }
83
84 fn visit_welcome_message_input(&mut self, m: &WelcomeMessageInput) -> Result<(), Self::Error> {
85 for_tuples!( #( Tuple.visit_welcome_message_input(m)?; )* );
86 Ok(())
87 }
88
89 fn visit_welcome_message_v1(&mut self, m: &WelcomeMessageV1) -> Result<(), Self::Error> {
90 for_tuples!( #( Tuple.visit_welcome_message_v1(m)?; )* );
91 Ok(())
92 }
93
94 fn visit_v3_group_message(&mut self, m: &V3GroupMessage) -> Result<(), Self::Error> {
95 for_tuples!( #( Tuple.visit_v3_group_message(m)?; )* );
96 Ok(())
97 }
98
99 fn visit_v3_welcome_message(&mut self, m: &V3WelcomeMessage) -> Result<(), Self::Error> {
100 for_tuples!( #( Tuple.visit_v3_welcome_message(m)?; )* );
101 Ok(())
102 }
103
104 fn visit_upload_key_package(&mut self, p: &UploadKeyPackageRequest) -> Result<(), Self::Error> {
105 for_tuples!( #( Tuple.visit_upload_key_package(p)?; )* );
106 Ok(())
107 }
108
109 fn visit_identity_update(&mut self, u: &IdentityUpdate) -> Result<(), Self::Error> {
110 for_tuples!( #( Tuple.visit_identity_update(u)?; )* );
111 Ok(())
112 }
113
114 fn visit_identity_update_log(&mut self, u: &IdentityUpdateLog) -> Result<(), Self::Error> {
115 for_tuples!( #( Tuple.visit_identity_update_log(u)?; )* );
116 Ok(())
117 }
118
119 fn visit_identity_updates_request(
120 &mut self,
121 u: &get_identity_updates_request::Request,
122 ) -> Result<(), Self::Error> {
123 for_tuples!( #( Tuple.visit_identity_updates_request(u)?; )* );
124 Ok(())
125 }
126
127 fn visit_key_package(&mut self, k: &KeyPackage) -> Result<(), Self::Error> {
128 for_tuples!( #( Tuple.visit_key_package(k)?; )* );
129 Ok(())
130 }
131
132 fn visit_none(&mut self) -> Result<(), Self::Error> {
133 for_tuples!( #( Tuple.visit_none()?; )* );
134 Ok(())
135 }
136
137 fn visit_newest_envelope_response(
139 &mut self,
140 u: &get_newest_envelope_response::Response,
141 ) -> Result<(), Self::Error> {
142 for_tuples!( #( Tuple.visit_newest_envelope_response(u)?; )* );
143 Ok(())
144 }
145
146 fn visit_subscribe_group_messages_request(
148 &mut self,
149 r: &SubscribeGroupMessagesFilter,
150 ) -> Result<(), Self::Error> {
151 for_tuples!( #( Tuple.visit_subscribe_group_messages_request(r)?; )* );
152 Ok(())
153 }
154
155 fn visit_subscribe_welcome_messages_request(
157 &mut self,
158 r: &SubscribeWelcomeMessagesFilter,
159 ) -> Result<(), Self::Error> {
160 for_tuples!( #( Tuple.visit_subscribe_welcome_messages_request(r)?; )* );
161 Ok(())
162 }
163
164 #[cfg(any(test, feature = "test-utils"))]
165 fn test_visit_u32(&mut self, n: &u32) -> Result<(), Self::Error> {
166 for_tuples!( #( Tuple.test_visit_u32(n)?; )* );
167 Ok(())
168 }
169}
170
171impl<'a, T> EnvelopeVisitor<'a> for Vec<T>
173where
174 T: EnvelopeVisitor<'a>,
175 T::Error: std::error::Error,
176{
177 type Error = T::Error;
178
179 fn visit_originator(&mut self, envelope: &OriginatorEnvelope) -> Result<(), Self::Error> {
180 self.iter_mut()
181 .try_for_each(|t| t.visit_originator(envelope))?;
182 Ok(())
183 }
184
185 fn visit_unsigned_originator(
186 &mut self,
187 envelope: &UnsignedOriginatorEnvelope,
188 ) -> Result<(), Self::Error> {
189 self.iter_mut()
190 .try_for_each(|t| t.visit_unsigned_originator(envelope))?;
191 Ok(())
192 }
193
194 fn visit_payer(&mut self, envelope: &PayerEnvelope) -> Result<(), Self::Error> {
195 self.iter_mut().try_for_each(|t| t.visit_payer(envelope))?;
196 Ok(())
197 }
198
199 fn visit_client(&mut self, envelope: &ClientEnvelope) -> Result<(), Self::Error> {
200 self.iter_mut().try_for_each(|t| t.visit_client(envelope))?;
201 Ok(())
202 }
203
204 fn visit_group_message_version(
205 &mut self,
206 message: &GroupMessageVersion,
207 ) -> Result<(), Self::Error> {
208 self.iter_mut()
209 .try_for_each(|t| t.visit_group_message_version(message))?;
210 Ok(())
211 }
212
213 fn visit_group_message_input(&mut self, m: &GroupMessageInput) -> Result<(), Self::Error> {
214 self.iter_mut()
215 .try_for_each(|t| t.visit_group_message_input(m))?;
216 Ok(())
217 }
218
219 fn visit_group_message_v1(&mut self, message: &GroupMessageV1) -> Result<(), Self::Error> {
220 self.iter_mut()
221 .try_for_each(|t| t.visit_group_message_v1(message))?;
222 Ok(())
223 }
224
225 fn visit_welcome_message_version(
226 &mut self,
227 message: &WelcomeMessageVersion,
228 ) -> Result<(), Self::Error> {
229 self.iter_mut()
230 .try_for_each(|t| t.visit_welcome_message_version(message))?;
231 Ok(())
232 }
233
234 fn visit_welcome_message_input(&mut self, m: &WelcomeMessageInput) -> Result<(), Self::Error> {
235 self.iter_mut()
236 .try_for_each(|t| t.visit_welcome_message_input(m))?;
237 Ok(())
238 }
239
240 fn visit_welcome_message_v1(&mut self, message: &WelcomeMessageV1) -> Result<(), Self::Error> {
241 self.iter_mut()
242 .try_for_each(|t| t.visit_welcome_message_v1(message))?;
243 Ok(())
244 }
245
246 fn visit_v3_group_message(&mut self, m: &V3GroupMessage) -> Result<(), Self::Error> {
247 self.iter_mut()
248 .try_for_each(|t| t.visit_v3_group_message(m))?;
249 Ok(())
250 }
251
252 fn visit_v3_welcome_message(&mut self, m: &V3WelcomeMessage) -> Result<(), Self::Error> {
253 self.iter_mut()
254 .try_for_each(|t| t.visit_v3_welcome_message(m))?;
255 Ok(())
256 }
257
258 fn visit_upload_key_package(
259 &mut self,
260 package: &UploadKeyPackageRequest,
261 ) -> Result<(), Self::Error> {
262 self.iter_mut()
263 .try_for_each(|t| t.visit_upload_key_package(package))?;
264 Ok(())
265 }
266
267 fn visit_identity_update(&mut self, update: &IdentityUpdate) -> Result<(), Self::Error> {
268 self.iter_mut()
269 .try_for_each(|t| t.visit_identity_update(update))?;
270 Ok(())
271 }
272
273 fn visit_identity_update_log(&mut self, u: &IdentityUpdateLog) -> Result<(), Self::Error> {
274 self.iter_mut()
275 .try_for_each(|t| t.visit_identity_update_log(u))?;
276 Ok(())
277 }
278
279 fn visit_identity_updates_request(
281 &mut self,
282 u: &get_identity_updates_request::Request,
283 ) -> Result<(), Self::Error> {
284 self.iter_mut()
285 .try_for_each(|t| t.visit_identity_updates_request(u))?;
286 Ok(())
287 }
288
289 fn visit_key_package(&mut self, k: &KeyPackage) -> Result<(), Self::Error> {
290 self.iter_mut().try_for_each(|t| t.visit_key_package(k))?;
291 Ok(())
292 }
293
294 fn visit_none(&mut self) -> Result<(), Self::Error> {
298 self.iter_mut().try_for_each(|t| t.visit_none())?;
299 Ok(())
300 }
301
302 fn visit_newest_envelope_response(
304 &mut self,
305 u: &get_newest_envelope_response::Response,
306 ) -> Result<(), Self::Error> {
307 self.iter_mut()
308 .try_for_each(|t| t.visit_newest_envelope_response(u))?;
309 Ok(())
310 }
311
312 fn visit_subscribe_group_messages_request(
314 &mut self,
315 r: &SubscribeGroupMessagesFilter,
316 ) -> Result<(), Self::Error> {
317 self.iter_mut()
318 .try_for_each(|t| t.visit_subscribe_group_messages_request(r))?;
319 Ok(())
320 }
321
322 fn visit_subscribe_welcome_messages_request(
324 &mut self,
325 r: &SubscribeWelcomeMessagesFilter,
326 ) -> Result<(), Self::Error> {
327 self.iter_mut()
328 .try_for_each(|t| t.visit_subscribe_welcome_messages_request(r))?;
329 Ok(())
330 }
331
332 #[cfg(any(test, feature = "test-utils"))]
333 fn test_visit_u32(&mut self, n: &u32) -> Result<(), Self::Error> {
334 self.iter_mut().try_for_each(|t| t.test_visit_u32(n))?;
335 Ok(())
336 }
337}