1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use crate::{AUDIENCE, SPANNER};
use google_cloud_gax::conn::{Channel, ConnectionManager, Environment, Error};
use google_cloud_gax::grpc::Code;
use google_cloud_gax::retry::RetrySetting;
use google_cloud_longrunning::autogen::operations_client::OperationsClient;
use std::time::Duration;

pub mod database;
pub mod instance;

const SCOPES: [&str; 2] = [
    "https://www.googleapis.com/auth/cloud-platform",
    "https://www.googleapis.com/auth/spanner.admin",
];

pub fn default_retry_setting() -> RetrySetting {
    RetrySetting {
        from_millis: 50,
        max_delay: Some(Duration::from_secs(10)),
        factor: 1u64,
        take: 20,
        codes: vec![Code::Unavailable, Code::Unknown, Code::DeadlineExceeded],
    }
}

pub async fn default_internal_client() -> Result<(Channel, OperationsClient), Error> {
    let environment = match std::env::var("SPANNER_EMULATOR_HOST") {
        Ok(s) => Environment::Emulator(s),
        Err(_) => Environment::GoogleCloud(google_cloud_auth::project().await?),
    };
    let conn_pool = ConnectionManager::new(1, SPANNER, AUDIENCE, Some(&SCOPES), &environment).await?;
    let conn = conn_pool.conn();
    let lro_client = OperationsClient::new(conn).await?;
    Ok((conn_pool.conn(), lro_client))
}