Skip to main content

aico/
utils.rs

1#[cfg(not(target_arch = "riscv64"))]
2use rustls::crypto::aws_lc_rs;
3#[cfg(target_arch = "riscv64")]
4use rustls::crypto::ring;
5use std::env;
6use std::path::PathBuf;
7use std::{sync::LazyLock, time::Duration};
8
9pub fn get_app_config_dir() -> PathBuf {
10    if let Ok(xdg) = env::var("XDG_CONFIG_HOME") {
11        PathBuf::from(xdg).join("aico")
12    } else {
13        let home = env::var("HOME")
14            .map(PathBuf::from)
15            .unwrap_or_else(|_| PathBuf::from("."));
16        home.join(".config").join("aico")
17    }
18}
19
20pub fn get_app_cache_dir() -> PathBuf {
21    if let Ok(custom) = env::var("AICO_CACHE_DIR") {
22        return PathBuf::from(custom);
23    }
24    if let Ok(xdg) = env::var("XDG_CACHE_HOME") {
25        PathBuf::from(xdg).join("aico")
26    } else {
27        let home = env::var("HOME")
28            .map(PathBuf::from)
29            .unwrap_or_else(|_| PathBuf::from("."));
30        home.join(".cache").join("aico")
31    }
32}
33
34pub fn setup_crypto_provider() {
35    static DONE: LazyLock<()> = LazyLock::new(|| {
36        if rustls::crypto::CryptoProvider::get_default().is_none() {
37            #[cfg(target_arch = "riscv64")]
38            let provider = ring::default_provider();
39
40            #[cfg(not(target_arch = "riscv64"))]
41            let provider = aws_lc_rs::default_provider();
42
43            let _ = provider.install_default();
44        }
45    });
46    *DONE;
47}
48
49pub fn setup_http_client() -> reqwest::Client {
50    setup_crypto_provider();
51
52    reqwest::Client::builder()
53        .connect_timeout(Duration::from_secs(10))
54        .pool_idle_timeout(Duration::from_secs(90))
55        .tcp_keepalive(Duration::from_secs(30))
56        .build()
57        .unwrap_or_else(|_| reqwest::Client::new())
58}