1pub mod error;
2pub mod query;
3pub mod wait;
4use std::time::Duration;
5
6use aws_config::{
7 BehaviorVersion,
8 timeout::{TimeoutConfig, TimeoutConfigBuilder},
9};
10pub use aws_sdk_athena;
11use aws_sdk_athena::Client;
12
13pub async fn make_client_with_timeout_default(endpoint_url: Option<String>) -> Client {
14 make_client_with_timeout(
15 endpoint_url,
16 Some(Duration::from_secs(3100)),
17 Some(Duration::from_secs(60)),
18 Some(Duration::from_secs(55)),
19 Some(Duration::from_secs(50)),
20 )
21 .await
22}
23
24pub async fn make_client_with_timeout(
25 endpoint_url: Option<String>,
26 connect_timeout: Option<Duration>,
27 operation_timeout: Option<Duration>,
28 operation_attempt_timeout: Option<Duration>,
29 read_timeout: Option<Duration>,
30) -> Client {
31 let mut timeout_config = TimeoutConfigBuilder::new();
32 timeout_config
33 .set_connect_timeout(connect_timeout)
34 .set_operation_timeout(operation_timeout)
35 .set_operation_attempt_timeout(operation_attempt_timeout)
36 .set_read_timeout(read_timeout);
37 make_client(endpoint_url, Some(timeout_config.build())).await
38}
39
40pub async fn make_client(
41 endpoint_url: Option<String>,
42 timeout_config: Option<TimeoutConfig>,
43) -> Client {
44 let mut config_loader = aws_config::defaults(BehaviorVersion::latest());
45 if let Some(timeout_config) = timeout_config {
46 config_loader = config_loader.timeout_config(timeout_config);
47 }
48 let config = config_loader.load().await;
49 let mut builder = aws_sdk_athena::config::Builder::from(&config);
50 if let Some(aws_endpoint_url) = endpoint_url {
51 builder = builder.endpoint_url(aws_endpoint_url)
52 }
53 Client::from_conf(builder.build())
54}