sword_layers/req_timeout/
config.rs

1use crate::{DisplayConfig, utils::TimeConfig};
2use console::style;
3use duration_str::parse as parse_duration;
4use serde::{Deserialize, Serialize};
5use std::time::Duration;
6
7/// ### Request Timeout Configuration
8///
9/// Configuration for the Request Timeout Layer
10/// This configuration allows you to set a maximum duration for request handling.
11#[derive(Debug, Clone, Serialize, Deserialize)]
12#[serde(default)]
13pub struct RequestTimeoutConfig {
14    /// Boolean indicating if request timeout is enabled. Defaults to false.
15    pub enabled: bool,
16    /// The timeout duration as a string (e.g., "30s", "1m"). Defaults to "15s".
17    pub timeout: TimeConfig,
18    /// Whether to display the configuration details. Defaults to false.
19    pub display: bool,
20}
21
22impl DisplayConfig for RequestTimeoutConfig {
23    fn display(&self) {
24        if !self.display {
25            return;
26        }
27
28        println!("\n{}", style("Request Timeout Configuration:").bold());
29
30        if self.enabled {
31            println!("  ↳  Request Timeout: {}", self.timeout.raw);
32        } else {
33            println!("  ↳  Request Timeout: disabled");
34        }
35    }
36}
37
38impl Default for RequestTimeoutConfig {
39    fn default() -> Self {
40        let duration_str = "15s".to_string();
41        let parsed_duration =
42            parse_duration(&duration_str).unwrap_or_else(|_| Duration::from_secs(15));
43
44        RequestTimeoutConfig {
45            enabled: false,
46            timeout: TimeConfig {
47                parsed: parsed_duration,
48                raw: duration_str,
49            },
50            display: false,
51        }
52    }
53}