Skip to content

Commit 09b2cda

Browse files
authored
chore: Add UserAgent string to KMS client (#1716)
1 parent 7b8d6ac commit 09b2cda

File tree

1 file changed

+41
-19
lines changed
  • ComAmazonawsKms/runtimes/rust/src

1 file changed

+41
-19
lines changed

ComAmazonawsKms/runtimes/rust/src/kms.rs

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
#![deny(nonstandard_style)]
66
#![deny(clippy::all)]
77

8-
use aws_config::Region;
8+
use aws_config::{AppName, Region, SdkConfig};
99
use std::sync::LazyLock;
10-
1110
static DAFNY_TOKIO_RUNTIME: LazyLock<tokio::runtime::Runtime> = LazyLock::new(|| {
1211
tokio::runtime::Builder::new_multi_thread()
1312
.enable_all()
@@ -17,12 +16,7 @@ static DAFNY_TOKIO_RUNTIME: LazyLock<tokio::runtime::Runtime> = LazyLock::new(||
1716

1817
impl crate::r#software::amazon::cryptography::services::kms::internaldafny::_default {
1918
#[allow(non_snake_case)]
20-
pub fn KMSClientForRegion(region: &::dafny_runtime::Sequence<::dafny_runtime::DafnyCharUTF16>) -> ::dafny_runtime::Rc<crate::r#_Wrappers_Compile::Result<::dafny_runtime::Object<dyn crate::software::amazon::cryptography::services::kms::internaldafny::types::IKMSClient>, ::dafny_runtime::Rc<crate::software::amazon::cryptography::services::kms::internaldafny::types::Error>>>{
21-
let region =
22-
dafny_runtime::dafny_runtime_conversions::unicode_chars_false::dafny_string_to_string(
23-
region,
24-
);
25-
19+
fn CreateSdkConfig() -> SdkConfig {
2620
let shared_config = match tokio::runtime::Handle::try_current() {
2721
Ok(curr) => tokio::task::block_in_place(|| {
2822
curr.block_on(async {
@@ -34,6 +28,17 @@ impl crate::r#software::amazon::cryptography::services::kms::internaldafny::_def
3428
)),
3529
};
3630

31+
let shared_config = Self::AddUserAgentStringToConfig(&shared_config);
32+
shared_config
33+
}
34+
#[allow(non_snake_case)]
35+
pub fn KMSClientForRegion(region: &::dafny_runtime::Sequence<::dafny_runtime::DafnyCharUTF16>) -> ::dafny_runtime::Rc<crate::r#_Wrappers_Compile::Result<::dafny_runtime::Object<dyn crate::software::amazon::cryptography::services::kms::internaldafny::types::IKMSClient>, ::dafny_runtime::Rc<crate::software::amazon::cryptography::services::kms::internaldafny::types::Error>>>{
36+
let region =
37+
dafny_runtime::dafny_runtime_conversions::unicode_chars_false::dafny_string_to_string(
38+
region,
39+
);
40+
41+
let shared_config = &Self::CreateSdkConfig();
3742
let shared_config = shared_config
3843
.to_builder()
3944
.region(Region::new(region))
@@ -48,17 +53,7 @@ impl crate::r#software::amazon::cryptography::services::kms::internaldafny::_def
4853

4954
#[allow(non_snake_case)]
5055
pub fn KMSClient() -> ::dafny_runtime::Rc<crate::r#_Wrappers_Compile::Result<::dafny_runtime::Object<dyn crate::software::amazon::cryptography::services::kms::internaldafny::types::IKMSClient>, ::dafny_runtime::Rc<crate::software::amazon::cryptography::services::kms::internaldafny::types::Error>>>{
51-
let shared_config = match tokio::runtime::Handle::try_current() {
52-
Ok(curr) => tokio::task::block_in_place(|| {
53-
curr.block_on(async {
54-
aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await
55-
})
56-
}),
57-
Err(_) => DAFNY_TOKIO_RUNTIME.block_on(aws_config::load_defaults(
58-
aws_config::BehaviorVersion::latest(),
59-
)),
60-
};
61-
56+
let shared_config = &Self::CreateSdkConfig();
6257
let inner = aws_sdk_kms::Client::new(&shared_config);
6358
let client = crate::client::Client { inner };
6459
let dafny_client = ::dafny_runtime::upcast_object()(::dafny_runtime::object::new(client));
@@ -67,6 +62,33 @@ impl crate::r#software::amazon::cryptography::services::kms::internaldafny::_def
6762
})
6863
}
6964

65+
#[allow(non_snake_case)]
66+
fn AddUserAgentStringToConfig(sdkConfig: &SdkConfig) -> SdkConfig {
67+
let runtime = format!("Rust");
68+
let runtime_msg = dafny_runtime::dafny_runtime_conversions::unicode_chars_false::string_to_dafny_string(&runtime);
69+
// sadly rust doesn't allow for '/' in the app name which the dafny function adds
70+
// so we will replace '/' with '-' which is allowed
71+
let user_agent_string = dafny_runtime::dafny_runtime_conversions::unicode_chars_false::dafny_string_to_string(
72+
&crate::software::amazon::cryptography::services::kms::internaldafny::_default::DafnyUserAgentSuffix(&runtime_msg)
73+
);
74+
let replaced_user_agent_string = user_agent_string.replace("/", "-");
75+
// To update the user agent string we take the application name and update it.
76+
let current_app_name = sdkConfig.app_name()
77+
.map(|app_name| app_name.to_string())
78+
.unwrap_or_else(|| "".to_string());
79+
let new_app_name = if current_app_name.is_empty() {
80+
format!("{}", replaced_user_agent_string)
81+
} else {
82+
format!("{} {} ", current_app_name, replaced_user_agent_string)
83+
};
84+
let app_name = AppName::new(new_app_name)
85+
.expect("Valid app name");
86+
let sdkConfig = sdkConfig
87+
.to_builder()
88+
.app_name(app_name)
89+
.build();
90+
sdkConfig
91+
}
7092
#[allow(non_snake_case)]
7193
pub fn RegionMatch(
7294
kmsClient: &::dafny_runtime::Object<dyn crate::software::amazon::cryptography::services::kms::internaldafny::types::IKMSClient>,

0 commit comments

Comments
 (0)