97 lines
3.2 KiB
Rust
97 lines
3.2 KiB
Rust
use std::{
|
|
env,
|
|
fs::{self, File},
|
|
io::{BufWriter, Write},
|
|
path::Path,
|
|
};
|
|
|
|
use itertools::Itertools;
|
|
use strum::IntoEnumIterator;
|
|
|
|
fn main() {
|
|
let out_dir = env::var_os("OUT_DIR").unwrap();
|
|
let dest_path = Path::new(&out_dir).join("ts_types.rs");
|
|
let output_file = File::create(dest_path).unwrap();
|
|
let mut writer = BufWriter::new(&output_file);
|
|
|
|
let mut ts_types: String = String::new();
|
|
|
|
let lt_tsunion: String = Itertools::intersperse(
|
|
ic10emu::grammar::generated::LogicType::iter().map(|lt| format!("\"{}\"", lt.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let lt_tstype = format!("\nexport type LogicType = {};", lt_tsunion);
|
|
ts_types.push_str(<_tstype);
|
|
|
|
let slt_tsunion: String = Itertools::intersperse(
|
|
ic10emu::grammar::generated::SlotLogicType::iter().map(|slt| format!("\"{}\"", slt.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let slt_tstype = format!("\nexport type SlotLogicType = {};", slt_tsunion);
|
|
ts_types.push_str(&slt_tstype);
|
|
|
|
let bm_tsunion: String = Itertools::intersperse(
|
|
ic10emu::grammar::generated::BatchMode::iter().map(|bm| format!("\"{}\"", bm.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let bm_tstype = format!("\nexport type BatchMode = {};", bm_tsunion);
|
|
ts_types.push_str(&bm_tstype);
|
|
|
|
let rm_tsunion: String = Itertools::intersperse(
|
|
ic10emu::grammar::generated::ReagentMode::iter().map(|rm| format!("\"{}\"", rm.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let rm_tstype = format!("\nexport type ReagentMode = {};", rm_tsunion);
|
|
ts_types.push_str(&rm_tstype);
|
|
|
|
let sc_tsunion: String = Itertools::intersperse(
|
|
ic10emu::device::SortingClass::iter().map(|rm| format!("\"{}\"", rm.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let sc_tstype = format!("\nexport type SlotType = {};", sc_tsunion);
|
|
ts_types.push_str(&sc_tstype);
|
|
|
|
let st_tsunion: String = Itertools::intersperse(
|
|
ic10emu::device::SlotType::iter().map(|rm| format!("\"{}\"", rm.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let st_tstype = format!("\nexport type SortingClass = {};", st_tsunion);
|
|
ts_types.push_str(&st_tstype);
|
|
|
|
let ct_tsunion: String = Itertools::intersperse(
|
|
ic10emu::network::ConnectionType::iter().map(|rm| format!("\"{}\"", rm.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let ct_tstype = format!("\nexport type ConnectionType = {};", ct_tsunion);
|
|
ts_types.push_str(&ct_tstype);
|
|
|
|
let cr_tsunion: String = Itertools::intersperse(
|
|
ic10emu::network::ConnectionRole::iter().map(|rm| format!("\"{}\"", rm.as_ref())),
|
|
"\n | ".to_owned(),
|
|
)
|
|
.collect();
|
|
let cr_tstype = format!("\nexport type ConnectionRole = {};", cr_tsunion);
|
|
ts_types.push_str(&cr_tstype);
|
|
|
|
let infile = Path::new("src/types.ts");
|
|
let contents = fs::read_to_string(infile).unwrap();
|
|
|
|
ts_types.push('\n');
|
|
ts_types.push_str(&contents);
|
|
|
|
write!(
|
|
&mut writer,
|
|
"#[wasm_bindgen(typescript_custom_section)]\n\
|
|
const TYPES: &'static str = r#\"{ts_types}\"#;
|
|
"
|
|
)
|
|
.unwrap();
|
|
}
|