56 lines
1.6 KiB
Rust
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}",
|
|
}}"#
|
|
))
|
|
}
|