telemetry_rust/middleware/aws/instrumentation/fluent_builder/
sns.rs

1/// AWS SNS fluent builder instrumentation implementations
2/// Generated by GitHub Copilot with human guidance
3use super::{utils::*, *};
4use crate::semconv;
5
6impl<'a> AwsBuilderInstrument<'a> for PublishFluentBuilder {
7    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
8        let topic_arn = self.get_target_arn().clone().unwrap_or_default();
9        SnsSpanBuilder::publish(topic_arn)
10    }
11}
12impl InstrumentedFluentBuilderOutput for PublishOutput {
13    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
14        attributes![
15            self.message_id()
16                .as_attribute(semconv::MESSAGING_MESSAGE_ID),
17        ]
18    }
19}
20instrument_aws_operation!(aws_sdk_sns::operation::publish);
21
22impl<'a> AwsBuilderInstrument<'a> for PublishBatchFluentBuilder {
23    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
24        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
25        let attributes = attributes![
26            self.get_publish_batch_request_entries()
27                .as_ref()
28                .map(|entries| entries.len())
29                .as_attribute(semconv::MESSAGING_BATCH_MESSAGE_COUNT)
30        ];
31        SnsSpanBuilder::publish_batch(topic_arn).attributes(attributes)
32    }
33}
34impl InstrumentedFluentBuilderOutput for PublishBatchOutput {
35    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
36        attributes![
37            self.failed()
38                .len()
39                .as_attribute("messaging.batch.message_count.failed"),
40        ]
41    }
42}
43instrument_aws_operation!(aws_sdk_sns::operation::publish_batch);
44
45// Topic management operations
46impl<'a> AwsBuilderInstrument<'a> for CreateTopicFluentBuilder {
47    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
48        SnsSpanBuilder::create_topic()
49    }
50}
51impl InstrumentedFluentBuilderOutput for CreateTopicOutput {
52    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
53        attributes![
54            self.topic_arn()
55                .as_attribute(semconv::MESSAGING_DESTINATION_NAME),
56        ]
57    }
58}
59instrument_aws_operation!(aws_sdk_sns::operation::create_topic);
60
61impl<'a> AwsBuilderInstrument<'a> for DeleteTopicFluentBuilder {
62    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
63        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
64        SnsSpanBuilder::delete_topic(topic_arn)
65    }
66}
67impl InstrumentedFluentBuilderOutput for DeleteTopicOutput {}
68instrument_aws_operation!(aws_sdk_sns::operation::delete_topic);
69
70impl<'a> AwsBuilderInstrument<'a> for GetTopicAttributesFluentBuilder {
71    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
72        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
73        SnsSpanBuilder::get_topic_attributes(topic_arn)
74    }
75}
76impl InstrumentedFluentBuilderOutput for GetTopicAttributesOutput {}
77instrument_aws_operation!(aws_sdk_sns::operation::get_topic_attributes);
78
79impl<'a> AwsBuilderInstrument<'a> for SetTopicAttributesFluentBuilder {
80    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
81        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
82        SnsSpanBuilder::set_topic_attributes(topic_arn)
83    }
84}
85impl InstrumentedFluentBuilderOutput for SetTopicAttributesOutput {}
86instrument_aws_operation!(aws_sdk_sns::operation::set_topic_attributes);
87
88impl<'a> AwsBuilderInstrument<'a> for ListTopicsFluentBuilder {
89    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
90        SnsSpanBuilder::list_topics()
91    }
92}
93impl InstrumentedFluentBuilderOutput for ListTopicsOutput {}
94instrument_aws_operation!(aws_sdk_sns::operation::list_topics);
95
96// Subscription operations
97impl<'a> AwsBuilderInstrument<'a> for SubscribeFluentBuilder {
98    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
99        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
100        SnsSpanBuilder::subscribe(topic_arn)
101    }
102}
103impl InstrumentedFluentBuilderOutput for SubscribeOutput {}
104instrument_aws_operation!(aws_sdk_sns::operation::subscribe);
105
106impl<'a> AwsBuilderInstrument<'a> for UnsubscribeFluentBuilder {
107    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
108        SnsSpanBuilder::unsubscribe()
109    }
110}
111impl InstrumentedFluentBuilderOutput for UnsubscribeOutput {}
112instrument_aws_operation!(aws_sdk_sns::operation::unsubscribe);
113
114impl<'a> AwsBuilderInstrument<'a> for ConfirmSubscriptionFluentBuilder {
115    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
116        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
117        SnsSpanBuilder::confirm_subscription(topic_arn)
118    }
119}
120impl InstrumentedFluentBuilderOutput for ConfirmSubscriptionOutput {}
121instrument_aws_operation!(aws_sdk_sns::operation::confirm_subscription);
122
123impl<'a> AwsBuilderInstrument<'a> for ListSubscriptionsFluentBuilder {
124    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
125        SnsSpanBuilder::list_subscriptions()
126    }
127}
128impl InstrumentedFluentBuilderOutput for ListSubscriptionsOutput {}
129instrument_aws_operation!(aws_sdk_sns::operation::list_subscriptions);
130
131impl<'a> AwsBuilderInstrument<'a> for ListSubscriptionsByTopicFluentBuilder {
132    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
133        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
134        SnsSpanBuilder::list_subscriptions_by_topic(topic_arn)
135    }
136}
137impl InstrumentedFluentBuilderOutput for ListSubscriptionsByTopicOutput {}
138instrument_aws_operation!(aws_sdk_sns::operation::list_subscriptions_by_topic);
139
140impl<'a> AwsBuilderInstrument<'a> for GetSubscriptionAttributesFluentBuilder {
141    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
142        SnsSpanBuilder::get_subscription_attributes()
143    }
144}
145impl InstrumentedFluentBuilderOutput for GetSubscriptionAttributesOutput {}
146instrument_aws_operation!(aws_sdk_sns::operation::get_subscription_attributes);
147
148impl<'a> AwsBuilderInstrument<'a> for SetSubscriptionAttributesFluentBuilder {
149    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
150        SnsSpanBuilder::set_subscription_attributes()
151    }
152}
153impl InstrumentedFluentBuilderOutput for SetSubscriptionAttributesOutput {}
154instrument_aws_operation!(aws_sdk_sns::operation::set_subscription_attributes);
155
156// Permission operations
157impl<'a> AwsBuilderInstrument<'a> for AddPermissionFluentBuilder {
158    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
159        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
160        SnsSpanBuilder::add_permission(topic_arn)
161    }
162}
163impl InstrumentedFluentBuilderOutput for AddPermissionOutput {}
164instrument_aws_operation!(aws_sdk_sns::operation::add_permission);
165
166impl<'a> AwsBuilderInstrument<'a> for RemovePermissionFluentBuilder {
167    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
168        let topic_arn = self.get_topic_arn().clone().unwrap_or_default();
169        SnsSpanBuilder::remove_permission(topic_arn)
170    }
171}
172impl InstrumentedFluentBuilderOutput for RemovePermissionOutput {}
173instrument_aws_operation!(aws_sdk_sns::operation::remove_permission);
174
175// Platform application operations
176impl<'a> AwsBuilderInstrument<'a> for CreatePlatformApplicationFluentBuilder {
177    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
178        SnsSpanBuilder::create_platform_application()
179    }
180}
181impl InstrumentedFluentBuilderOutput for CreatePlatformApplicationOutput {}
182instrument_aws_operation!(aws_sdk_sns::operation::create_platform_application);
183
184impl<'a> AwsBuilderInstrument<'a> for DeletePlatformApplicationFluentBuilder {
185    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
186        SnsSpanBuilder::delete_platform_application()
187    }
188}
189impl InstrumentedFluentBuilderOutput for DeletePlatformApplicationOutput {}
190instrument_aws_operation!(aws_sdk_sns::operation::delete_platform_application);
191
192impl<'a> AwsBuilderInstrument<'a> for GetPlatformApplicationAttributesFluentBuilder {
193    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
194        SnsSpanBuilder::get_platform_application_attributes()
195    }
196}
197impl InstrumentedFluentBuilderOutput for GetPlatformApplicationAttributesOutput {}
198instrument_aws_operation!(aws_sdk_sns::operation::get_platform_application_attributes);
199
200impl<'a> AwsBuilderInstrument<'a> for SetPlatformApplicationAttributesFluentBuilder {
201    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
202        SnsSpanBuilder::set_platform_application_attributes()
203    }
204}
205impl InstrumentedFluentBuilderOutput for SetPlatformApplicationAttributesOutput {}
206instrument_aws_operation!(aws_sdk_sns::operation::set_platform_application_attributes);
207
208impl<'a> AwsBuilderInstrument<'a> for ListPlatformApplicationsFluentBuilder {
209    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
210        SnsSpanBuilder::list_platform_applications()
211    }
212}
213impl InstrumentedFluentBuilderOutput for ListPlatformApplicationsOutput {}
214instrument_aws_operation!(aws_sdk_sns::operation::list_platform_applications);
215
216// Platform endpoint operations
217impl<'a> AwsBuilderInstrument<'a> for CreatePlatformEndpointFluentBuilder {
218    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
219        SnsSpanBuilder::create_platform_endpoint()
220    }
221}
222impl InstrumentedFluentBuilderOutput for CreatePlatformEndpointOutput {}
223instrument_aws_operation!(aws_sdk_sns::operation::create_platform_endpoint);
224
225impl<'a> AwsBuilderInstrument<'a> for DeleteEndpointFluentBuilder {
226    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
227        SnsSpanBuilder::delete_endpoint()
228    }
229}
230impl InstrumentedFluentBuilderOutput for DeleteEndpointOutput {}
231instrument_aws_operation!(aws_sdk_sns::operation::delete_endpoint);
232
233impl<'a> AwsBuilderInstrument<'a> for GetEndpointAttributesFluentBuilder {
234    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
235        SnsSpanBuilder::get_endpoint_attributes()
236    }
237}
238impl InstrumentedFluentBuilderOutput for GetEndpointAttributesOutput {}
239instrument_aws_operation!(aws_sdk_sns::operation::get_endpoint_attributes);
240
241impl<'a> AwsBuilderInstrument<'a> for SetEndpointAttributesFluentBuilder {
242    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
243        SnsSpanBuilder::set_endpoint_attributes()
244    }
245}
246impl InstrumentedFluentBuilderOutput for SetEndpointAttributesOutput {}
247instrument_aws_operation!(aws_sdk_sns::operation::set_endpoint_attributes);
248
249impl<'a> AwsBuilderInstrument<'a> for ListEndpointsByPlatformApplicationFluentBuilder {
250    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
251        SnsSpanBuilder::list_endpoints_by_platform_application()
252    }
253}
254impl InstrumentedFluentBuilderOutput for ListEndpointsByPlatformApplicationOutput {}
255instrument_aws_operation!(aws_sdk_sns::operation::list_endpoints_by_platform_application);
256
257// Origination number operations
258impl<'a> AwsBuilderInstrument<'a> for ListOriginationNumbersFluentBuilder {
259    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
260        SnsSpanBuilder::list_origination_numbers()
261    }
262}
263impl InstrumentedFluentBuilderOutput for ListOriginationNumbersOutput {}
264instrument_aws_operation!(aws_sdk_sns::operation::list_origination_numbers);
265
266// Simple phone number operations
267impl<'a> AwsBuilderInstrument<'a> for CheckIfPhoneNumberIsOptedOutFluentBuilder {
268    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
269        SnsSpanBuilder::check_if_phone_number_is_opted_out()
270    }
271}
272impl InstrumentedFluentBuilderOutput for CheckIfPhoneNumberIsOptedOutOutput {}
273instrument_aws_operation!(aws_sdk_sns::operation::check_if_phone_number_is_opted_out);
274
275impl<'a> AwsBuilderInstrument<'a> for OptInPhoneNumberFluentBuilder {
276    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
277        SnsSpanBuilder::opt_in_phone_number()
278    }
279}
280impl InstrumentedFluentBuilderOutput for OptInPhoneNumberOutput {}
281instrument_aws_operation!(aws_sdk_sns::operation::opt_in_phone_number);
282
283impl<'a> AwsBuilderInstrument<'a> for ListPhoneNumbersOptedOutFluentBuilder {
284    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
285        SnsSpanBuilder::list_phone_numbers_opted_out()
286    }
287}
288impl InstrumentedFluentBuilderOutput for ListPhoneNumbersOptedOutOutput {}
289instrument_aws_operation!(aws_sdk_sns::operation::list_phone_numbers_opted_out);
290
291// Add just one SMS operation to test the custom macro
292impl<'a> AwsBuilderInstrument<'a> for GetSMSAttributesFluentBuilder {
293    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
294        SnsSpanBuilder::get_sms_attributes()
295    }
296}
297impl InstrumentedFluentBuilderOutput for GetSmsAttributesOutput {}
298instrument_aws_operation!(
299    aws_sdk_sns::operation::get_sms_attributes,
300    GetSMSAttributesFluentBuilder,
301    GetSmsAttributesOutput,
302    GetSMSAttributesError
303);
304
305// SMS sandbox operations
306impl<'a> AwsBuilderInstrument<'a> for CreateSMSSandboxPhoneNumberFluentBuilder {
307    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
308        SnsSpanBuilder::create_sms_sandbox_phone_number()
309    }
310}
311impl InstrumentedFluentBuilderOutput for CreateSmsSandboxPhoneNumberOutput {}
312instrument_aws_operation!(
313    aws_sdk_sns::operation::create_sms_sandbox_phone_number,
314    CreateSMSSandboxPhoneNumberFluentBuilder,
315    CreateSmsSandboxPhoneNumberOutput,
316    CreateSMSSandboxPhoneNumberError
317);
318
319impl<'a> AwsBuilderInstrument<'a> for DeleteSMSSandboxPhoneNumberFluentBuilder {
320    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
321        SnsSpanBuilder::delete_sms_sandbox_phone_number()
322    }
323}
324impl InstrumentedFluentBuilderOutput for DeleteSmsSandboxPhoneNumberOutput {}
325instrument_aws_operation!(
326    aws_sdk_sns::operation::delete_sms_sandbox_phone_number,
327    DeleteSMSSandboxPhoneNumberFluentBuilder,
328    DeleteSmsSandboxPhoneNumberOutput,
329    DeleteSMSSandboxPhoneNumberError
330);
331
332impl<'a> AwsBuilderInstrument<'a> for GetSMSSandboxAccountStatusFluentBuilder {
333    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
334        SnsSpanBuilder::get_sms_sandbox_account_status()
335    }
336}
337impl InstrumentedFluentBuilderOutput for GetSmsSandboxAccountStatusOutput {}
338instrument_aws_operation!(
339    aws_sdk_sns::operation::get_sms_sandbox_account_status,
340    GetSMSSandboxAccountStatusFluentBuilder,
341    GetSmsSandboxAccountStatusOutput,
342    GetSMSSandboxAccountStatusError
343);
344
345impl<'a> AwsBuilderInstrument<'a> for ListSMSSandboxPhoneNumbersFluentBuilder {
346    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
347        SnsSpanBuilder::list_sms_sandbox_phone_numbers()
348    }
349}
350impl InstrumentedFluentBuilderOutput for ListSmsSandboxPhoneNumbersOutput {}
351instrument_aws_operation!(
352    aws_sdk_sns::operation::list_sms_sandbox_phone_numbers,
353    ListSMSSandboxPhoneNumbersFluentBuilder,
354    ListSmsSandboxPhoneNumbersOutput,
355    ListSMSSandboxPhoneNumbersError
356);
357
358impl<'a> AwsBuilderInstrument<'a> for VerifySMSSandboxPhoneNumberFluentBuilder {
359    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
360        SnsSpanBuilder::verify_sms_sandbox_phone_number()
361    }
362}
363impl InstrumentedFluentBuilderOutput for VerifySmsSandboxPhoneNumberOutput {}
364instrument_aws_operation!(
365    aws_sdk_sns::operation::verify_sms_sandbox_phone_number,
366    VerifySMSSandboxPhoneNumberFluentBuilder,
367    VerifySmsSandboxPhoneNumberOutput,
368    VerifySMSSandboxPhoneNumberError
369);
370
371// SMS attributes operations
372impl<'a> AwsBuilderInstrument<'a> for SetSMSAttributesFluentBuilder {
373    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
374        SnsSpanBuilder::set_sms_attributes()
375    }
376}
377impl InstrumentedFluentBuilderOutput for SetSmsAttributesOutput {}
378instrument_aws_operation!(
379    aws_sdk_sns::operation::set_sms_attributes,
380    SetSMSAttributesFluentBuilder,
381    SetSmsAttributesOutput,
382    SetSMSAttributesError
383);
384
385// Data protection operations
386impl<'a> AwsBuilderInstrument<'a> for GetDataProtectionPolicyFluentBuilder {
387    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
388        SnsSpanBuilder::get_data_protection_policy()
389    }
390}
391impl InstrumentedFluentBuilderOutput for GetDataProtectionPolicyOutput {}
392instrument_aws_operation!(aws_sdk_sns::operation::get_data_protection_policy);
393
394impl<'a> AwsBuilderInstrument<'a> for PutDataProtectionPolicyFluentBuilder {
395    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
396        SnsSpanBuilder::put_data_protection_policy()
397    }
398}
399impl InstrumentedFluentBuilderOutput for PutDataProtectionPolicyOutput {}
400instrument_aws_operation!(aws_sdk_sns::operation::put_data_protection_policy);
401
402// Resource tagging operations
403impl<'a> AwsBuilderInstrument<'a> for ListTagsForResourceFluentBuilder {
404    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
405        SnsSpanBuilder::list_tags_for_resource()
406    }
407}
408impl InstrumentedFluentBuilderOutput for ListTagsForResourceOutput {}
409instrument_aws_operation!(aws_sdk_sns::operation::list_tags_for_resource);
410
411impl<'a> AwsBuilderInstrument<'a> for TagResourceFluentBuilder {
412    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
413        SnsSpanBuilder::tag_resource()
414    }
415}
416impl InstrumentedFluentBuilderOutput for TagResourceOutput {}
417instrument_aws_operation!(aws_sdk_sns::operation::tag_resource);
418
419impl<'a> AwsBuilderInstrument<'a> for UntagResourceFluentBuilder {
420    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
421        SnsSpanBuilder::untag_resource()
422    }
423}
424impl InstrumentedFluentBuilderOutput for UntagResourceOutput {}
425instrument_aws_operation!(aws_sdk_sns::operation::untag_resource);