qlty_cloud/
lib.rs

1pub mod export;
2pub mod format;
3mod token;
4pub mod version;
5
6pub use token::Token;
7use ureq::Request;
8pub use version::VERSION;
9
10const QLTY_API_URL: &str = "https://qlty.sh/api";
11const USER_AGENT_PREFIX: &str = "qlty";
12
13#[derive(Default, Debug, Clone)]
14pub struct Client {
15    pub base_url: String,
16    pub token: Option<String>,
17}
18
19impl Client {
20    pub fn new(token: &str) -> Self {
21        Self {
22            base_url: match std::env::var("QLTY_API_URL") {
23                Ok(url) => url,
24                Err(_) => QLTY_API_URL.to_string(),
25            },
26            token: Some(token.to_string()),
27        }
28    }
29
30    pub fn post(&self, path: &str) -> ureq::Request {
31        let url = self.build_url(path);
32        self.build_request(ureq::post(&url))
33    }
34
35    pub fn get(&self, path: &str) -> ureq::Request {
36        let url = self.build_url(path);
37        self.build_request(ureq::get(&url))
38    }
39
40    fn build_url(&self, path: &str) -> String {
41        format!("{}{}", self.base_url, path)
42    }
43
44    fn build_request(&self, request: Request) -> Request {
45        let mut request = request;
46
47        request = request.set("User-Agent", &format!("{}/{}", USER_AGENT_PREFIX, VERSION));
48
49        if let Some(header_value) = self.authorization_header() {
50            request = request.set("Authorization", &header_value);
51        }
52
53        request
54    }
55
56    fn authorization_header(&self) -> Option<String> {
57        self.token.as_ref().map(|token| format!("Bearer {}", token))
58    }
59}