Skip to main content

bimp_net/
config.rs

1use std::time::Duration;
2
3const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(10);
4const DEFAULT_REQUEST_TIMEOUT: Duration = Duration::from_secs(30);
5const DEFAULT_IMPERSONATION_TARGET: &str = "chrome136";
6
7/// Redirect handling policy for a request.
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum RedirectPolicy {
10    /// Return the first HTTP response without following redirects.
11    None,
12    /// Ask libcurl to follow redirects before returning the final response.
13    Follow,
14}
15
16/// Configuration applied to every request sent by a [`crate::Client`].
17#[derive(Debug, Clone)]
18pub struct Config {
19    /// libcurl-impersonate target, such as `chrome136`.
20    pub impersonation_target: String,
21    /// Maximum time allowed to establish the connection.
22    pub connect_timeout: Duration,
23    /// Maximum total time allowed for the request.
24    pub request_timeout: Duration,
25    /// Redirect behavior for requests.
26    pub redirect_policy: RedirectPolicy,
27    /// Whether libcurl-impersonate should install its default browser headers.
28    pub default_headers: bool,
29}
30
31impl Default for Config {
32    /// Builds a Chrome-oriented default configuration.
33    fn default() -> Self {
34        Self {
35            impersonation_target: DEFAULT_IMPERSONATION_TARGET.to_string(),
36            connect_timeout: DEFAULT_CONNECT_TIMEOUT,
37            request_timeout: DEFAULT_REQUEST_TIMEOUT,
38            redirect_policy: RedirectPolicy::None,
39            default_headers: true,
40        }
41    }
42}