blob: 578f359de7e724faf046c6de06a769498d08f973 [file] [log] [blame] [edit]
use stringdex::internals::tree::encode_search_tree_ukkonen;
use stringdex::internals::{write_data_to_disk, write_tree_to_disk};
use std::io::{self, BufRead};
use std::{fs, mem};
fn main() -> Result<(), Box<dyn std::error::Error>> {
if fs::exists("examples")? {
std::env::set_current_dir("examples")?;
} else if fs::exists("../examples")? {
std::env::set_current_dir("../examples")?;
}
if fs::exists("search.index")? {
fs::remove_dir_all("search.index")?;
}
if fs::exists("search.data")? {
fs::remove_dir_all("search.data")?;
}
if fs::exists("search-index.js")? {
fs::remove_file("search-index.js")?;
}
let mut serialized_root = Vec::new();
let dataset = std::fs::read("../benches/words")?;
let dataset_words: Vec<&[u8]> = dataset.split(|c: &u8| *c == b'\n').collect();
let tree: stringdex::internals::tree::SearchTree =
encode_search_tree_ukkonen(dataset_words.iter().map(|x| &x[..]));
serialized_root.extend_from_slice(br#"rr_('{"word":{"I":""#);
write_tree_to_disk(&tree, "search.index", &mut serialized_root)?;
mem::drop(tree);
serialized_root.extend_from_slice(br#"","#);
serialized_root.extend(write_data_to_disk(
&mut dataset_words.into_iter(),
"search.data",
)?);
mem::drop(dataset);
serialized_root.extend_from_slice(br#"},"definition":{"#);
let dataset = io::BufReader::new(fs::File::open("../benches/definitions")?);
let mut line_reading_error = None;
serialized_root.extend(write_data_to_disk(
&mut dataset.lines().map_while(|result| match result {
Ok(definition) => Some(definition),
Err(e) => {
line_reading_error = Some(e);
None
}
}),
"search.data",
)?);
if let Some(error) = line_reading_error {
return Err(error.into());
}
serialized_root.extend_from_slice(br#"}}')"#);
fs::write("search-index.js", serialized_root)?;
fs::copy("../js/stringdex.js", "stringdex.js")?;
Ok(())
}