42 lines
1.2 KiB
Rust
42 lines
1.2 KiB
Rust
use csv::{Reader, StringRecord};
|
|
use serde_derive::Deserialize;
|
|
use std::env;
|
|
use std::fs::File;
|
|
use std::io::{Result, Write};
|
|
use std::iter::FromIterator;
|
|
use std::string::String;
|
|
|
|
fn main() {
|
|
parse_error_codes().expect("Failed to parse error codes")
|
|
}
|
|
|
|
fn parse_error_codes() -> Result<()> {
|
|
println!("cargo:rerun-if-changed=ctap_error_codes.csv");
|
|
let mut out_file = File::create(format!(
|
|
"{}/ctap_error_codes.rs",
|
|
env::var("OUT_DIR").unwrap()
|
|
))?;
|
|
out_file.write_all(b"static CTAP_ERROR_CODES: &[(usize, &str, &str)] = &[")?;
|
|
let mut rdr = Reader::from_path("ctap_error_codes.csv")?;
|
|
rdr.set_headers(StringRecord::from_iter(&["code", "name", "desc"]));
|
|
#[derive(Debug, Deserialize)]
|
|
struct ErrorCode {
|
|
code: String,
|
|
name: String,
|
|
desc: String,
|
|
}
|
|
for result in rdr.deserialize() {
|
|
let record: ErrorCode = result.unwrap();
|
|
out_file.write_all(
|
|
format!(
|
|
"({}, \"{}\", \"{}\"),\n",
|
|
i64::from_str_radix(&record.code[2..], 16).unwrap(),
|
|
record.name,
|
|
record.desc
|
|
)
|
|
.as_bytes(),
|
|
)?;
|
|
}
|
|
out_file.write_all(b"];")
|
|
}
|