mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 04:04:55 +08:00
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
use aws_config::{self, meta::region::RegionProviderChain, Region};
|
|
use aws_sdk_lambda::{types::InvocationType::Event, Client};
|
|
use aws_smithy_types::Blob;
|
|
use common_utils::errors::CustomResult;
|
|
use error_stack::{report, ResultExt};
|
|
|
|
use crate::errors::AnalyticsError;
|
|
|
|
async fn get_aws_client(region: String) -> Client {
|
|
let region_provider = RegionProviderChain::first_try(Region::new(region));
|
|
let sdk_config = aws_config::from_env().region(region_provider).load().await;
|
|
Client::new(&sdk_config)
|
|
}
|
|
|
|
pub async fn invoke_lambda(
|
|
function_name: &str,
|
|
region: &str,
|
|
json_bytes: &[u8],
|
|
) -> CustomResult<(), AnalyticsError> {
|
|
get_aws_client(region.to_string())
|
|
.await
|
|
.invoke()
|
|
.function_name(function_name)
|
|
.invocation_type(Event)
|
|
.payload(Blob::new(json_bytes.to_owned()))
|
|
.send()
|
|
.await
|
|
.map_err(|er| {
|
|
let er_rep = format!("{er:?}");
|
|
report!(er).attach_printable(er_rep)
|
|
})
|
|
.change_context(AnalyticsError::UnknownError)
|
|
.attach_printable("Lambda invocation failed")?;
|
|
Ok(())
|
|
}
|