55#![ deny( nonstandard_style) ]
66#![ deny( clippy:: all) ]
77
8- use aws_config:: Region ;
8+ use aws_config:: { AppName , Region , SdkConfig } ;
99use std:: sync:: LazyLock ;
10-
1110static 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
1817impl 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,12 +28,23 @@ impl crate::r#software::amazon::cryptography::services::kms::internaldafny::_def
3428 ) ) ,
3529 } ;
3630
31+ Self :: AddUserAgentStringToConfig ( & shared_config)
32+ }
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) )
4045 . build ( ) ;
4146 let inner = aws_sdk_kms:: Client :: new ( & shared_config) ;
42- let client = crate :: deps :: com_amazonaws_kms :: client :: Client { inner } ;
47+ let client = crate :: KmsClient { inner } ;
4348 let dafny_client = :: dafny_runtime:: upcast_object ( ) ( :: dafny_runtime:: object:: new ( client) ) ;
4449 dafny_runtime:: Rc :: new ( crate :: r#_Wrappers_Compile:: Result :: Success {
4550 value : dafny_client,
@@ -48,25 +53,41 @@ 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-
62- let inner = aws_sdk_kms:: Client :: new ( & shared_config) ;
63- let client = crate :: deps:: com_amazonaws_kms:: client:: Client { inner } ;
56+ let shared_config = & Self :: CreateSdkConfig ( ) ;
57+ let inner = aws_sdk_kms:: Client :: new ( shared_config) ;
58+ let client = crate :: KmsClient { inner } ;
6459 let dafny_client = :: dafny_runtime:: upcast_object ( ) ( :: dafny_runtime:: object:: new ( client) ) ;
6560 dafny_runtime:: Rc :: new ( crate :: r#_Wrappers_Compile:: Result :: Success {
6661 value : dafny_client,
6762 } )
6863 }
6964
65+ #[ allow( non_snake_case) ]
66+ fn AddUserAgentStringToConfig ( sdkConfig : & SdkConfig ) -> SdkConfig {
67+ let runtime = "Rust" . to_string ( ) ;
68+ let runtime_msg =
69+ dafny_runtime:: dafny_runtime_conversions:: unicode_chars_false:: string_to_dafny_string (
70+ & runtime,
71+ ) ;
72+ // sadly rust doesn't allow for '/' in the app name which the dafny function adds
73+ // so we will replace '/' with '-' which is allowed
74+ let user_agent_string = dafny_runtime:: dafny_runtime_conversions:: unicode_chars_false:: dafny_string_to_string (
75+ & crate :: software:: amazon:: cryptography:: services:: kms:: internaldafny:: _default:: DafnyUserAgentSuffix ( & runtime_msg)
76+ ) ;
77+ let replaced_user_agent_string = user_agent_string. replace ( "/" , "-" ) ;
78+ // To update the user agent string we take the application name and update it.
79+ let current_app_name = sdkConfig
80+ . app_name ( )
81+ . map ( |app_name| app_name. to_string ( ) )
82+ . unwrap_or_default ( ) ;
83+ let new_app_name = if current_app_name. is_empty ( ) {
84+ replaced_user_agent_string. to_string ( )
85+ } else {
86+ format ! ( "{} {} " , current_app_name, replaced_user_agent_string)
87+ } ;
88+ let app_name = AppName :: new ( new_app_name) . expect ( "Valid app name" ) ;
89+ sdkConfig. to_builder ( ) . app_name ( app_name) . build ( )
90+ }
7091 #[ allow( non_snake_case) ]
7192 pub fn RegionMatch (
7293 kmsClient : & :: dafny_runtime:: Object < dyn crate :: software:: amazon:: cryptography:: services:: kms:: internaldafny:: types:: IKMSClient > ,
@@ -77,8 +98,7 @@ impl crate::r#software::amazon::cryptography::services::kms::internaldafny::_def
7798 region,
7899 ) ;
79100 let any = dafny_runtime:: cast_any_object!( kmsClient) ;
80- let client =
81- dafny_runtime:: cast_object!( any, crate :: deps:: com_amazonaws_kms:: client:: Client ) ;
101+ let client = dafny_runtime:: cast_object!( any, crate :: KmsClient ) ;
82102 let flag = match client. as_ref ( ) . inner . config ( ) . region ( ) {
83103 Some ( r) => r. as_ref ( ) == region,
84104 None => false ,
0 commit comments