1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
//! Definition of all configurable client options.
use http;
use std::time::Duration;
/// Defines various protocol and connection options.
#[derive(Clone, Debug, Withers)]
pub struct Options {
/// The policy for automatically following server redirects.
///
/// The default is to not follow redirects.
pub redirect_policy: RedirectPolicy,
/// A preferred HTTP version the client should attempt to use to communicate to the server with.
///
/// This is treated as a suggestion. A different version may be used if the server does not support it or negotiates
/// a different version.
///
/// The default value is `None` (any version).
pub preferred_http_version: Option<http::Version>,
/// A timeout for the maximum time allowed for a request-response cycle.
///
/// The default value is `None` (unlimited).
pub timeout: Option<Duration>,
/// A timeout for the initial connection phase.
///
/// The default value is 300 seconds.
pub connect_timeout: Duration,
/// Enable or disable TCP keepalive with a given probe interval.
///
/// The default value is `None` (disabled).
pub tcp_keepalive: Option<Duration>,
/// Enable or disable the `TCP_NODELAY` option.
///
/// The default value is `false`.
pub tcp_nodelay: bool,
/// Set the max buffer size in bytes to use for reading the response body.
///
/// The default value is 8 KiB.
pub buffer_size: usize,
/// Indicates whether the `Referer` header should be automatically updated.
pub auto_referer: bool,
/// A proxy to use for requests.
///
/// The proxy protocol is specified by the URI scheme.
///
/// - **`http`**: Proxy. Default when no scheme is specified.
/// - **`https`**: HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)
/// - **`socks4`**: SOCKS4 Proxy.
/// - **`socks4a`**: SOCKS4a Proxy. Proxy resolves URL hostname.
/// - **`socks5`**: SOCKS5 Proxy.
/// - **`socks5h`**: SOCKS5 Proxy. Proxy resolves URL hostname.
pub proxy: Option<http::Uri>,
/// A maximum upload speed for the request body, in bytes per second.
///
/// The default is unlimited.
pub max_upload_speed: Option<u64>,
/// A maximum download speed for the response body, in bytes per second.
///
/// The default is unlimited.
pub max_download_speed: Option<u64>,
}
impl Default for Options {
/// Create a new options with the default values.
fn default() -> Self {
Self {
redirect_policy: RedirectPolicy::default(),
preferred_http_version: None,
timeout: None,
connect_timeout: Duration::from_secs(300),
tcp_keepalive: None,
tcp_nodelay: false,
buffer_size: 8192,
auto_referer: false,
proxy: None,
max_upload_speed: None,
max_download_speed: None,
}
}
}
/// Describes a policy for handling server redirects.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum RedirectPolicy {
/// Do not apply any special treatment to redirect responses. The response will be return as-is and redirects will
/// not be followed.
///
/// This is the default policy.
None,
/// Follow all redirects automatically.
Follow,
/// Follow redirects automatically up to a maximum number of redirects.
Limit(u32),
}
impl Default for RedirectPolicy {
fn default() -> Self {
RedirectPolicy::None
}
}