use std::{env, fs, path::PathBuf}; use protox::Compiler; use protox::prost::Message; fn main() -> Result<(), std::io::Error> { let proto_paths = [ "proto/history.proto", "proto/control.proto", ]; let proto_include_dirs = ["proto"]; let file_descriptor_set = Compiler::new(proto_include_dirs) .map_err(std::io::Error::other)? .include_source_info(true) .include_imports(true) .open_files(proto_paths) .map_err(std::io::Error::other)? .file_descriptor_set(); let file_descriptor_path = PathBuf::from(env::var_os("OUT_DIR").expect("OUT_DIR not set")) .join("file_descriptor_set.bin"); fs::write(&file_descriptor_path, file_descriptor_set.encode_to_vec()).unwrap(); tonic_prost_build::configure() .build_server(true) .file_descriptor_set_path(&file_descriptor_path) .skip_protoc_run() .compile_protos(&proto_paths, &proto_include_dirs)?; Ok(()) }