outbox_pattern_processor/
aws.rs

1use std::borrow::Cow;
2use std::env;
3
4use aws_config::default_provider::credentials::DefaultCredentialsChain;
5use aws_config::Region;
6
7#[derive(Clone)]
8pub struct SnsClient {
9    pub client: aws_sdk_sns::Client,
10}
11
12#[derive(Clone)]
13pub struct SqsClient {
14    pub client: aws_sdk_sqs::Client,
15}
16
17impl SnsClient {
18    pub async fn new(aws_config: &aws_config::SdkConfig) -> SnsClient {
19        let endpoint = env::var("LOCAL_ENDPOINT").ok();
20        let region = env::var("LOCAL_REGION").map(|region| Region::new(Cow::Owned(region))).ok();
21
22        let client = match endpoint {
23            None => aws_sdk_sns::Client::new(aws_config),
24            Some(url) => aws_sdk_sns::Client::from_conf(
25                aws_sdk_sns::config::Builder::from(aws_config)
26                    .endpoint_url(url)
27                    .region(region)
28                    .credentials_provider(DefaultCredentialsChain::builder().build().await)
29                    .build(),
30            ),
31        };
32
33        SnsClient { client }
34    }
35}
36
37impl SqsClient {
38    pub async fn new(aws_config: &aws_config::SdkConfig) -> SqsClient {
39        let endpoint = env::var("LOCAL_ENDPOINT").ok();
40        let region = env::var("LOCAL_REGION").map(|region| Region::new(Cow::Owned(region))).ok();
41
42        let client = match endpoint {
43            None => aws_sdk_sqs::Client::new(aws_config),
44            Some(url) => aws_sdk_sqs::Client::from_conf(
45                aws_sdk_sqs::config::Builder::from(aws_config)
46                    .endpoint_url(url)
47                    .region(region)
48                    .credentials_provider(DefaultCredentialsChain::builder().build().await)
49                    .build(),
50            ),
51        };
52
53        SqsClient { client }
54    }
55}