# google-api-proto
[![ci](https://github.com/mechiru/google-api-proto/workflows/ci/badge.svg)](https://github.com/mechiru/google-api-proto/actions?query=workflow:ci)
[![pub](https://github.com/mechiru/google-api-proto/workflows/pub/badge.svg)](https://github.com/mechiru/google-api-proto/actions?query=workflow:pub)
[![doc](https://github.com/mechiru/google-api-proto/workflows/doc/badge.svg)](https://mechiru.github.io/google-api-proto/google_api_proto/index.html)
[![version](https://img.shields.io/crates/v/google-api-proto.svg)](https://crates.io/crates/google-api-proto)
This library generated from [googleapis/googleapis] using [tonic-build].
## Overview
This library contains all the code generated from the [googleapis/googleapis].
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](https://cloud.google.com/pubsub), 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:
```rust
pub mod google {
pub mod api {
// generated code
}
pub mod iam {
pub mod v1 {
// generated code
}
}
pub mod longrunning {
// generated code
}
pub mod r#type {
// generated code
}
pub mod rpc {
// generated code
}
pub mod spanner {
pub mod admin {
pub mod database {
pub mod v1 {
// generated code
}
}
}
}
}
```
In addition, multiple features can be specified.
The list of available features can be found [here](./google-api-proto/Cargo.toml).
## Version matrices
| google-api-proto | tonic | tonic-build |
|------------------|--------|-------------|
| 1.0.0 <= | 0.6.x | 0.6.x |
| 1.59.0 <= | 0.7.x | 0.7.x |
| 1.243.0 <= | 0.8.x | 0.8.x |
| 1.280.0 <= | 0.9.x | 0.9.x |
| 1.415.0 <= | 0.10.x | 0.10.x |
| 1.516.0 <= | 0.11.x | 0.11.x |
| 1.697.0 <= | 0.12.x | 0.12.x |
## Example
The complete code can be found [here](./examples/src/spanner.rs).
Cargo.toml:
```toml
[dependencies]
# For runtime
tokio = { version = "1.33.0", features = ["macros", "rt-multi-thread"] }
# For google authentication
google-authz = { version = "1.0.0-alpha.5", features = ["tonic"] }
# For gRPC
tonic = { version = "0.12.0", features = ["tls", "tls-webpki-roots"] }
prost = "0.13.1"
prost-types = "0.13.1"
google-api-proto = { version = "1", features = ["google-spanner-admin-database-v1"] }
```
main.rs:
```rust
use std::env;
use google_api_proto::google::spanner::admin::database::v1::{
database_admin_client::DatabaseAdminClient, ListDatabasesRequest,
};
use google_authz::GoogleAuthz;
use tonic::{transport::Channel, Request};
#[tokio::main]
async fn main() -> Result<(), Box> {
let project = "google project id";
let instance = "spanner instance name";
let channel = Channel::from_static("https://spanner.googleapis.com").connect().await?;
let channel = GoogleAuthz::new(channel).await;
let mut client = DatabaseAdminClient::new(channel);
let response = client
.list_databases(Request::new(ListDatabasesRequest {
parent: format!("projects/{}/instances/{}", project, instance),
page_size: 100,
..Default::default()
}))
.await?;
println!("response = {:#?}", response);
Ok(())
}
```
## License
Licensed under either of [Apache License, Version 2.0](./LICENSE-APACHE) or [MIT license](./LICENSE-MIT) at your option.
[googleapis/googleapis]: https://github.com/googleapis/googleapis
[tonic-build]: https://github.com/hyperium/tonic/tree/master/tonic-build