Files
ircp2000/build.rs
2025-03-11 14:50:59 +01:00

56 lines
1.6 KiB
Rust

use std::env;
use std::io::{BufWriter, Write};
use std::path::Path;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let path = Path::new(&env::var("OUT_DIR").unwrap()).join("capcodes.rs");
let mut file = BufWriter::new(std::fs::File::create(&path).unwrap());
let mut map = phf_codegen::Map::new();
let capcodelijst = std::fs::read_to_string("./capcodelijst.csv")?;
let mut codes = vec![];
for line in capcodelijst.lines() {
let capcode = line.split(";").next().unwrap_or_default().replace('"', "");
if !codes.contains(&capcode) {
codes.push(capcode.clone());
map.entry(capcode, &parse(line)?);
}
}
write!(
&mut file,
"static CAPCODES: phf::Map<&'static str, CapCode> = {}",
map.build()
)
.unwrap();
writeln!(&mut file, ";").unwrap();
println!("cargo::rerun-if-changed=capcodelijst.csv");
Ok(())
}
fn parse(s: &str) -> Result<String, Box<dyn std::error::Error>> {
let mut parts = s.split(';');
let capcode = parts.next().unwrap_or_default().replace('"', "");
let service = parts.next().unwrap_or_default().replace('"', "");
let region = parts.next().unwrap_or_default().replace('"', "");
let location = parts.next().unwrap_or_default().replace('"', "");
let description = parts.next().unwrap_or_default().replace('"', "");
// "0100005";"Brandweer";"Amsterdam-Amstelland";"Aalsmeer";"Officier van Dienst Aalsmeer/UitHoorn";""
Ok(format!(
r#"CapCode {{
capcode: "{capcode}",
service: "{service}",
region: "{region}",
location: "{location}",
description: "{description}",
}}"#
))
}