use std::{
env,
fs::OpenOptions,
io::{Read, Write},
path::Path,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
env::set_var("OUT_DIR", "src");
let path = Path::new("../format/Flight.proto");
if path.exists() {
println!("cargo:rerun-if-changed=../format/Flight.proto");
let proto_dir = Path::new("../format");
let proto_path = Path::new("../format/Flight.proto");
tonic_build::configure()
.protoc_arg("--experimental_allow_proto3_optional")
.compile(&[proto_path], &[proto_dir])?;
let mut file = OpenOptions::new()
.read(true)
.open("src/arrow.flight.protocol.rs")?;
let mut buffer = String::new();
file.read_to_string(&mut buffer)?;
let mut file = OpenOptions::new()
.write(true)
.truncate(true)
.open("src/arrow.flight.protocol.rs")?;
file.write_all("// This file was automatically generated through the build.rs script, and should not be edited.\n\n".as_bytes())?;
file.write_all(buffer.as_bytes())?;
}
env::set_var("OUT_DIR", "src/sql");
let path = Path::new("../format/FlightSql.proto");
if path.exists() {
println!("cargo:rerun-if-changed=../format/FlightSql.proto");
let proto_dir = Path::new("../format");
let proto_path = Path::new("../format/FlightSql.proto");
tonic_build::configure()
.protoc_arg("--experimental_allow_proto3_optional")
.compile(&[proto_path], &[proto_dir])?;
let mut file = OpenOptions::new()
.read(true)
.open("src/sql/arrow.flight.protocol.sql.rs")?;
let mut buffer = String::new();
file.read_to_string(&mut buffer)?;
let mut file = OpenOptions::new()
.write(true)
.truncate(true)
.open("src/sql/arrow.flight.protocol.sql.rs")?;
file.write_all("// This file was automatically generated through the build.rs script, and should not be edited.\n\n".as_bytes())?;
file.write_all(buffer.as_bytes())?;
}
Ok(())
}