use std::{ env, fs, ops::Deref, path::{Path, PathBuf}, }; fn out_dir() -> PathBuf { Path::new(&env::var("OUT_DIR").expect("env")).to_path_buf() } fn cleanup() { let _ = fs::remove_dir_all(out_dir()); } fn compile() { let proto_dir = Path::new(&env::var("CARGO_MANIFEST_DIR").expect("env")).join("proto"); let vsdir = proto_dir.join("video_streaming"); let files = &[ proto_dir.join("misc").join("common.proto"), vsdir.join("buffered_range.proto"), vsdir.join("client_abr_state.proto"), vsdir.join("crypto_params.proto"), vsdir.join("encrypted_player_request.proto"), vsdir.join("format_initialization_metadata.proto"), vsdir.join("live_metadata.proto"), vsdir.join("media_capabilities.proto"), vsdir.join("media_header.proto"), vsdir.join("next_request_policy.proto"), vsdir.join("onesie_header_type.proto"), vsdir.join("onesie_header.proto"), vsdir.join("onesie_player_request.proto"), vsdir.join("onesie_player_response.proto"), vsdir.join("onesie_request.proto"), vsdir.join("playback_cookie.proto"), vsdir.join("playback_start_policy.proto"), vsdir.join("proxy_status.proto"), vsdir.join("request_cancellation_policy.proto"), vsdir.join("sabr_error.proto"), vsdir.join("sabr_redirect.proto"), vsdir.join("stream_protection_status.proto"), vsdir.join("streamer_context.proto"), vsdir.join("time_range.proto"), vsdir.join("video_playback_abr_request.proto"), ]; let slices = files.iter().map(Deref::deref).collect::>(); let out_dir = out_dir(); fs::create_dir(&out_dir).expect("create_dir"); protobuf_codegen::Codegen::new() .pure() .out_dir(&out_dir) .inputs(&slices) .include(&proto_dir) .run() .expect("Codegen failed."); } fn main() { cleanup(); compile(); }