1 extern crate yada;
2 
3 use std::fs::File;
4 use std::io::{Read, Write};
5 use yada::builder::DoubleArrayBuilder;
6 use yada::DoubleArray;
7 
main() -> Result<(), Box<dyn std::error::Error>>8 fn main() -> Result<(), Box<dyn std::error::Error>> {
9     // filename to save and load
10     let filename = "load_from_file_example.da";
11 
12     // make a keyset which have key-value pairs
13     let keyset = &[
14         ("a".as_bytes(), 0),
15         ("aa".as_bytes(), 1),
16         ("aaa".as_bytes(), 2),
17         ("b".as_bytes(), 3),
18         ("bcd".as_bytes(), 4),
19     ];
20 
21     // build a double-array trie binary
22     let da_bytes = DoubleArrayBuilder::build(keyset);
23     assert!(da_bytes.is_some());
24 
25     // create a double-array trie instance
26     let da = DoubleArray::new(da_bytes.unwrap());
27 
28     // save to file
29     let mut file = File::create(filename)?;
30     file.write_all(da.0.as_slice())?;
31     file.flush()?;
32 
33     // load from file
34     let mut file = File::open(filename)?;
35     let mut buf = Vec::new();
36     let _ = file.read_to_end(&mut buf)?;
37     let da = DoubleArray::new(buf);
38 
39     // test search
40     for (key, value) in keyset.iter() {
41         let v = da.exact_match_search(key).unwrap();
42         assert_eq!(v, *value);
43     }
44     assert_eq!(
45         da.common_prefix_search(&"aaaa").collect::<Vec<_>>(),
46         vec![(0, 1), (1, 2), (2, 3)]
47     );
48     assert_eq!(
49         da.common_prefix_search(&"bcde").collect::<Vec<_>>(),
50         vec![(3, 1), (4, 3)]
51     );
52 
53     Ok(())
54 }
55