google_cloud_rust/
spanner.rs1use std::sync::Arc;
18
19use google_cloud_rust_raw::spanner::v1::{
20 spanner::{CreateSessionRequest, Session},
21 spanner_grpc::SpannerClient,
22};
23use grpcio::{CallOption, ChannelBuilder, ChannelCredentials, EnvBuilder, MetadataBuilder};
24
25#[allow(dead_code)]
26pub struct Client {
27 database: String,
28 client: SpannerClient,
29 session: Session,
30}
31
32impl Client {
33 pub fn new(database: &str) -> crate::Result<Client> {
44 let database = database.to_string();
45 let endpoint = "spanner.googleapis.com:443";
46
47 let env = Arc::new(EnvBuilder::new().build());
49 let creds = ChannelCredentials::google_default_credentials()?;
50
51 let chan = ChannelBuilder::new(Arc::clone(&env))
53 .max_send_message_len(100 << 20)
54 .max_receive_message_len(100 << 20)
55 .set_credentials(creds)
56 .connect(&endpoint);
57 let client = SpannerClient::new(chan);
58
59 let mut req = CreateSessionRequest::new();
60 req.set_database(database.to_string());
61 let mut meta = MetadataBuilder::new();
62 meta.add_str("google-cloud-resource-prefix", &database)?;
63 meta.add_str("x-goog-api-client", "googleapis-rs")?;
64 let opt = CallOption::default().headers(meta.build());
65 let session = client.create_session_opt(&req, opt)?;
66
67 Ok(Client {
68 database,
69 client,
70 session,
71 })
72 }
73}