bigquery_client/gcloud/
client.rs1use 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}