use std::path::PathBuf; use walkdir::{DirEntry, WalkDir}; fn proto_files(proto_dir: &str) -> Vec { 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") } }