use std::fs::File; use std::io::BufWriter; use std::path::PathBuf; use semver::Version; use std::io::Write; const WRITE_FAIL: &str = "Failed to write verision_inject file"; fn main() { let path = std::env::var_os("OUT_DIR") .map(PathBuf::from) .expect("Couldn't obtain cargo OUT_DIR") .join("version_inject.rs"); let file = File::create(path).expect("Couldn't create version_inject file"); let mut writer = BufWriter::new(file); let version = std::env::var("CARGO_PKG_VERSION") .expect("Unable to read package version"); let version = Version::parse(&version).expect("Failed to parse package version"); if !version.pre.is_empty() { write!(&mut writer, "const VERSION_DATA: [u8; 24] = [").expect(WRITE_FAIL); let len = std::cmp::min(24, version.pre.as_bytes().len()); for v in 0..len { write!(&mut writer, "0x{:X}, ", version.pre.as_bytes()[v]).expect(WRITE_FAIL); } for _ in 0..24 - len { write!(&mut writer, "0x0, ").expect(WRITE_FAIL); } writeln!(&mut writer, "];").expect(WRITE_FAIL); writeln!(&mut writer, "pub const HELLO_PACKET: Hello = Hello::new({}, Some(VERSION_DATA));", version.major) .expect(WRITE_FAIL); } else { writeln!(&mut writer, "pub const HELLO_PACKET: Hello = Hello::new({}, None);", version.major) .expect(WRITE_FAIL); } }