use std::sync::Arc;
use futures::executor::block_on;
use google_cloud_rust_raw::spanner::v1::{
spanner::{CreateSessionRequest, ExecuteSqlRequest},
spanner_grpc::SpannerClient,
};
use grpcio::{CallOption, ChannelBuilder, ChannelCredentials, EnvBuilder, MetadataBuilder};
async fn async_main() {
let database = "projects/mozilla-rust-sdk-dev/instances/mozilla-spanner-dev/databases/mydb";
let endpoint = "spanner.googleapis.com:443";
let env = Arc::new(EnvBuilder::new().build());
let creds = ChannelCredentials::google_default_credentials().unwrap();
let chan = ChannelBuilder::new(env.clone())
.max_send_message_len(100 << 20)
.max_receive_message_len(100 << 20)
.set_credentials(creds)
.connect(&endpoint);
let client = SpannerClient::new(chan);
let mut req = CreateSessionRequest::new();
req.database = database.to_string();
let mut meta = MetadataBuilder::new();
meta.add_str("google-cloud-resource-prefix", database)
.unwrap();
meta.add_str("x-goog-api-client", "googleapis-rs").unwrap();
let opt = CallOption::default().headers(meta.build());
let session = client.create_session_opt(&req, opt).unwrap();
let mut req = ExecuteSqlRequest::new();
req.session = session.get_name().to_string();
req.sql = "select * from planets".to_string();
let out = client.execute_sql(&req).unwrap();
dbg!(out);
let fut = client.execute_sql_async(&req).unwrap();
let out = fut.await.unwrap();
dbg!(out);
}
fn main() {
block_on(async_main());
}