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}