Skip to main content

kellnr_settings/
proxy.rs

1use clap_serde_derive::ClapSerde;
2use serde::{Deserialize, Serialize};
3use url::Url;
4
5fn default_proxy_url() -> Url {
6    Url::parse("https://static.crates.io/crates/").unwrap()
7}
8
9fn default_index_url() -> Url {
10    Url::parse("https://index.crates.io/").unwrap()
11}
12
13#[derive(Debug, Deserialize, Serialize, Eq, PartialEq, Clone, ClapSerde)]
14#[serde(default)]
15pub struct Proxy {
16    /// Enable crates.io proxy
17    #[default(false)]
18    #[arg(id = "proxy-enabled", long = "proxy-enabled")]
19    pub enabled: bool,
20
21    /// Number of proxy threads
22    #[default(10)]
23    #[arg(id = "proxy-num-threads", long = "proxy-num-threads")]
24    pub num_threads: usize,
25
26    /// Download crates on index update
27    #[default(false)]
28    #[arg(id = "proxy-download-on-update", long = "proxy-download-on-update")]
29    pub download_on_update: bool,
30
31    /// Crates.io download URL
32    #[default(default_proxy_url())]
33    #[arg(id = "proxy-url", long = "proxy-url")]
34    pub url: Url,
35
36    /// Crates.io index URL
37    #[default(default_index_url())]
38    #[arg(id = "proxy-index", long = "proxy-index")]
39    pub index: Url,
40
41    /// Connect timeout in seconds for upstream requests
42    #[default(5)]
43    #[arg(id = "proxy-connect-timeout", long = "proxy-connect-timeout")]
44    pub connect_timeout_seconds: u64,
45
46    /// Request timeout in seconds for upstream downloads
47    #[default(30)]
48    #[arg(id = "proxy-request-timeout", long = "proxy-request-timeout")]
49    pub request_timeout_seconds: u64,
50}