use std::error::Error;
use std::path::PathBuf;
pub fn main() -> Result<(), Box<dyn Error>> {
let out_dir = PathBuf::from(std::env::var_os("OUT_DIR").unwrap());
let src = PathBuf::from(std::env::var_os("CARGO_MANIFEST_DIR").unwrap()).join("src");
let proto_dir = src.join("plugins").join("telemetry").join("proto");
let reports_src = proto_dir.join("reports.proto");
let reports_out = out_dir.join("reports.proto");
let mut content = std::fs::read_to_string(&reports_src)?;
let message = "\nmessage";
let msg_index = content.find(message).ok_or("cannot find message string")?;
content.insert_str(msg_index, "\npackage Reports;\n");
content = content.replace("[(js_use_toArray) = true]", "");
content = content.replace("[(js_preEncoded) = true]", "");
std::fs::write(&reports_out, &content)?;
println!("cargo:rerun-if-changed={}", reports_src.to_str().unwrap());
tonic_prost_build::configure()
.field_attribute(
"Trace.start_time",
"#[serde(serialize_with = \"crate::plugins::telemetry::apollo_exporter::serialize_timestamp\")]",
)
.field_attribute(
"Trace.end_time",
"#[serde(serialize_with = \"crate::plugins::telemetry::apollo_exporter::serialize_timestamp\")]",
)
.field_attribute(
"FetchNode.sent_time",
"#[serde(serialize_with = \"crate::plugins::telemetry::apollo_exporter::serialize_timestamp\")]",
)
.field_attribute(
"FetchNode.received_time",
"#[serde(serialize_with = \"crate::plugins::telemetry::apollo_exporter::serialize_timestamp\")]",
)
.field_attribute(
"Report.end_time",
"#[serde(serialize_with = \"crate::plugins::telemetry::apollo_exporter::serialize_timestamp\")]",
)
.type_attribute(".", "#[derive(serde::Serialize)]")
.type_attribute(".", "#[allow(dead_code)]")
.emit_rerun_if_changed(false)
.compile_protos(&[reports_out], &[out_dir])?;
Ok(())
}