Files
discordp2000/build.rs
2025-03-15 12:26:31 +01:00

61 lines
1.9 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("./res/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=./res/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 = match parts.next().unwrap_or_default().replace('"', "").as_str() {
"Politie" => String::from("Service::Politie"),
"Brandweer" => String::from("Service::Brandweer"),
"Ambulance" => String::from("Service::Ambulance"),
o => format!("Service::Overige(\"{}\")", o),
};
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}",
}}"#
))
}