krpc-client 0.6.0

A stand-alone client for the Kerbal Space Program kRPC mod.
Documentation
use std::{
    env,
    fs::File,
    io::{Read, Write},
    path::Path,
};
mod krpc_build;

use protobuf_codegen::Customize;

fn main() {
    println!("cargo:rerun-if-changed=proto/krpc.proto");

    let out_dir = env::var_os("OUT_DIR").unwrap();

    protobuf_codegen::Codegen::new()
        .pure()
        // LSP handles this fine, but IntelliJ Rust can't figure it out.
        .customize(Customize::default().gen_mod_rs(false))
        .includes(["proto"])
        .input("proto/krpc.proto")
        .out_dir(&out_dir)
        .run_from_script();

    let proto_path = Path::new(&out_dir);

    let mut contents = String::new();
    File::open(proto_path.join("krpc.rs"))
        .unwrap()
        .read_to_string(&mut contents)
        .unwrap();

    let new_contents = format!("pub mod krpc {{\n{contents}\n}}");
    File::create(proto_path.join("krpc.rs"))
        .unwrap()
        .write_all(new_contents.as_bytes())
        .unwrap();

    let mut f = File::create(proto_path.join("services.rs")).unwrap();
    if let Some(path) = env::var("KRPC_SERVICES")
        .ok()
        .map(|path| Path::new(&path).to_owned())
        .filter(|path| path.exists())
    {
        krpc_build::build(path.to_str().unwrap(), &mut f).unwrap();
    } else {
        krpc_build::build("service_definitions/", &mut f).unwrap();
    }
}