bigquery_client/gcloud/
client.rs

1use gouth::Builder;
2use gouth::Token;
3use std::env;
4
5pub struct GCloud {
6    token: Token,
7}
8
9pub type GCloudFactory = dyn Fn()->GCloud;
10
11impl GCloud {
12
13    pub fn default() -> GCloud {
14        let credentials_file = "GOOGLE_APPLICATION_CREDENTIALS";
15        GCloud::from_env(credentials_file)
16    }
17
18    pub fn from_env(env_name: &str) -> GCloud {
19        let credentials_file = env::var(env_name).unwrap();
20        GCloud::from_file(credentials_file.as_str())
21    }
22
23    pub fn from_file(credentials_file: &str) -> GCloud {
24        let token = generate_token(credentials_file);
25        GCloud{token}
26    }
27
28    pub fn header_value(&self) -> String {
29        let header = self.token.header_value().unwrap();
30        format!("{}", header)
31    }
32    
33}
34
35pub(crate) trait Endpoint {
36    fn endpoint(&self, resource: &str) -> String {
37        let base_endpoint = "https://bigquery.googleapis.com";
38        format!("{}/{}", base_endpoint, resource)
39    }
40}
41fn generate_token(credentials_file: &str) -> Token {
42    Builder::new().file(credentials_file).build().unwrap()
43}