This library generated from Google API using tonic-build.
This library contains all the code generated from the Google API.
When using each product API, you must explicitly include it in your build using a feature flag.
For example, if you want to use Cloud Pub/Sub, write features = ["google-pubsub-v1"]
to Cargo.toml.
The feature name is the period of the package name of each proto file, replaced by a hyphen.
If you specify a package, it will automatically load the dependent packages and include them in the build.
It means that features = ["google-spanner-admin-database-v1"]
is the same as the code below:
pub mod google {
pub mod api {
tonic::include_proto!("google.api");
}
pub mod iam {
pub mod v1 {
tonic::include_proto!("google.iam.v1");
}
}
pub mod longrunning {
tonic::include_proto!("google.longrunning");
}
pub mod r#type {
tonic::include_proto!("google.r#type");
}
pub mod rpc {
tonic::include_proto!("google.rpc");
}
pub mod spanner {
pub mod admin {
pub mod database {
pub mod v1 {
tonic::include_proto!("google.spanner.admin.database.v1");
}
}
}
}
}
In addition, multiple features can be specified.
The list of available features can be found here.
The complete code can be found here.
Cargo.toml:
[dependencies]
googapis = { version = "0.1", features = ["google-spanner-admin-database-v1"] }
gouth = { version = "0.1" }
tonic = { version = "0.2", features = ["tls"] }
prost = { version = "0.6" }
prost-types = { version = "0.6" }
tokio = { version = "0.2", features = ["rt-threaded", "time", "stream", "fs", "macros", "uds"] }
main.rs:
use googapis::{
google::spanner::admin::database::v1::{
database_admin_client::DatabaseAdminClient, ListDatabasesRequest,
},
CERTIFICATES,
};
use gouth::Token;
use tonic::{
metadata::MetadataValue,
transport::{Certificate, Channel, ClientTlsConfig},
Request,
};
// PROJECT=your-project-id DATABASE=your-spanner-instance cargo run
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let project = std::env::var("PROJECT")?;
let database = std::env::var("DATABASE")?;
let token = Token::new()?;
let tls_config = ClientTlsConfig::new()
.ca_certificate(Certificate::from_pem(CERTIFICATES))
.domain_name("spanner.googleapis.com");
let channel = Channel::from_static("https://spanner.googleapis.com")
.tls_config(tls_config)
.connect()
.await?;
let mut service = DatabaseAdminClient::with_interceptor(channel, move |mut req: Request<()>| {
let token = &*token.header_value().unwrap();
let meta = MetadataValue::from_str(token).unwrap();
req.metadata_mut().insert("authorization", meta);
Ok(req)
});
let response = service
.list_databases(Request::new(ListDatabasesRequest {
parent: format!("projects/{}/instances/{}", project, database),
page_size: 100,
..Default::default()
}))
.await?;
println!("RESPONSE={:?}", response);
Ok(())
}
Licensed under either of Apache License, Version 2.0 or MIT license at your option.