1use vector_lib::configurable::configurable_component;
4
5use serde_with::serde_as;
6
7#[serde_as]
9#[configurable_component]
10#[derive(Copy, Clone, Debug, Derivative)]
11#[derivative(Default)]
12#[serde(deny_unknown_fields)]
13pub struct AwsTimeout {
14 #[configurable(metadata(docs::examples = 20))]
18 #[configurable(metadata(docs::human_name = "Connect Timeout"))]
19 #[configurable(metadata(docs::type_unit = "seconds"))]
20 #[serde(skip_serializing_if = "Option::is_none")]
21 #[serde(rename = "connect_timeout_seconds")]
22 connect_timeout: Option<u64>,
23
24 #[configurable(metadata(docs::examples = 20))]
31 #[configurable(metadata(docs::human_name = "Operation Timeout"))]
32 #[configurable(metadata(docs::type_unit = "seconds"))]
33 #[serde(skip_serializing_if = "Option::is_none")]
34 #[serde(rename = "operation_timeout_seconds")]
35 operation_timeout: Option<u64>,
36
37 #[configurable(metadata(docs::examples = 20))]
43 #[configurable(metadata(docs::human_name = "Read Timeout"))]
44 #[configurable(metadata(docs::type_unit = "seconds"))]
45 #[serde(skip_serializing_if = "Option::is_none")]
46 #[serde(rename = "read_timeout_seconds")]
47 read_timeout: Option<u64>,
48}
49
50impl AwsTimeout {
51 pub const fn connect_timeout(&self) -> Option<u64> {
53 self.connect_timeout
54 }
55
56 pub const fn operation_timeout(&self) -> Option<u64> {
58 self.operation_timeout
59 }
60
61 pub const fn read_timeout(&self) -> Option<u64> {
63 self.read_timeout
64 }
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[test]
72 fn parsing_timeout_configuration() {
73 let config = toml::from_str::<AwsTimeout>(
74 r"
75 connect_timeout_seconds = 20
76 operation_timeout_seconds = 20
77 read_timeout_seconds = 60
78 ",
79 )
80 .unwrap();
81
82 assert_eq!(config.connect_timeout, Some(20));
83 assert_eq!(config.operation_timeout, Some(20));
84 assert_eq!(config.read_timeout, Some(60));
85 }
86}