use std::env; use std::io::{BufWriter, Write}; use std::path::Path; fn main() -> Result<(), Box> { 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> { 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}", }}"# )) }