ea1383682d
This uses tonic to generate the full set of gRPC clients for Yandex Cloud. Includes some utility functions like an authentication interceptor to make these actually work. Since the upstream protos are exported regularly I've decided that the versioning will simply be date-based. The point of this is journaldriver integration, of course, hence also the log-centric example code. Change-Id: I00a615dcba80030e7f9bcfd476b2cfdb298f130d Reviewed-on: https://cl.tvl.fyi/c/depot/+/8525 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
use std::path::PathBuf;
|
|
use walkdir::{DirEntry, WalkDir};
|
|
|
|
fn proto_files(proto_dir: &str) -> Vec<PathBuf> {
|
|
let mut out = vec![];
|
|
|
|
fn is_proto(entry: &DirEntry) -> bool {
|
|
entry.file_type().is_file()
|
|
&& entry
|
|
.path()
|
|
.extension()
|
|
.map(|e| e.to_string_lossy() == "proto")
|
|
.unwrap_or(false)
|
|
}
|
|
|
|
for entry in WalkDir::new(format!("{}/yandex", proto_dir)).into_iter() {
|
|
let entry = entry.expect("failed to list proto files");
|
|
|
|
if is_proto(&entry) {
|
|
out.push(entry.into_path())
|
|
}
|
|
}
|
|
|
|
out
|
|
}
|
|
|
|
fn main() {
|
|
if let Some(proto_dir) = option_env!("YANDEX_CLOUD_PROTOS") {
|
|
tonic_build::configure()
|
|
.build_client(true)
|
|
.build_server(false)
|
|
.out_dir("src/")
|
|
.include_file("includes.rs")
|
|
.compile(
|
|
&proto_files(proto_dir),
|
|
&[
|
|
format!("{}", proto_dir),
|
|
format!("{}/third_party/googleapis", proto_dir),
|
|
],
|
|
)
|
|
.expect("failed to generate gRPC clients for Yandex Cloud")
|
|
}
|
|
}
|