use std::path::PathBuf;
use quote::quote;
fn main() {
let raw_csv = include_str!("list.csv"); let rdr = csv::Reader::from_reader(raw_csv.as_bytes());
let mut match_arms = Vec::new();
for row in rdr.into_deserialize::<Row>().flatten() {
let Row {
company,
id,
_approved_on_date,
} = row;
let company = company.replace('\u{a0}', " ");
let id = id.replace('\u{a0}', "");
let company = company.trim();
match_arms.push(quote!(#id => Some(#company),));
}
if match_arms.is_empty() {
panic!("Didn't detect any entries in the given file.");
}
match_arms.dedup_by(|a, b| a.to_string() == b.to_string());
let func = quote! {
pub(crate) fn _company_from_pnp_id(id: &str) -> Option<&'static str> {
match id {
#(#match_arms)*
_ => None,
}
}
};
let syn_file = syn::parse2(func).expect("func should parse ok");
let output = prettyplease::unparse(&syn_file);
let build_dir = std::env::var("OUT_DIR").expect("out_dir should be defined during builds");
let output_path = PathBuf::from(build_dir).join("pnpid");
_ = std::fs::create_dir_all(&output_path); std::fs::write(output_path.join("___pnpid.rs"), output)
.expect("we have perms to write here. because we're compiling rn...");
}
#[derive(Debug, serde::Deserialize)]
struct Row {
#[serde(rename = "Company")]
pub company: String,
#[serde(rename = "PNP ID")]
pub id: String,
#[serde(rename = "Approved On Date")]
pub _approved_on_date: String,
}