-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.rs
44 lines (39 loc) · 1.34 KB
/
build.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use rust_embed::RustEmbed;
use std::env;
use std::fs;
use std::path::Path;
#[derive(RustEmbed)]
#[folder = "alphabets"]
struct Asset;
fn main() {
let files: Vec<String> = Asset::iter().map(|a| a.to_string()).collect();
let mut alphabets: Vec<(String, String)> = files
.iter()
.map(|file_path| {
let file = Asset::get(file_path).unwrap();
let header = &String::from_utf8_lossy(&file.data)[2..]; // Strip "# " from the header
(
file_path.to_string(),
header.split('\n').next().unwrap().to_string(),
)
})
.collect();
alphabets.sort_by(|(a, _), (b, _)| a.cmp(b));
let mut contents = String::new();
contents.push_str(
"use strum_macros::{Display, EnumString};\n\
#[derive(Debug, Display, EnumString, Clone)]\n\
#[allow(non_camel_case_types)]\n\
pub enum Alphabet {\n",
);
for (language, header) in alphabets {
contents.push_str(&format!(" /// {}\n", header));
contents.push_str(&format!(" {},\n", language));
}
contents.push_str("}\n");
let out_dir = env::var_os("OUT_DIR").unwrap();
dbg!(&out_dir);
let dest_path = Path::new(&out_dir).join("alphabet_kinds.rs");
fs::write(dest_path, contents).unwrap();
println!("cargo:rerun-if-changed=build.rs");
}