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