lindera_dictionary/loader/
user_dictionary.rs1use std::path::Path;
2
3use crate::LinderaResult;
4use crate::builder::DictionaryBuilder;
5use crate::dictionary::UserDictionary;
6use crate::util::read_file;
7
8pub struct UserDictionaryLoader;
10
11impl UserDictionaryLoader {
12 pub fn load_from_bin<P: AsRef<Path>>(path: P) -> LinderaResult<UserDictionary> {
14 let data = read_file(path.as_ref())?;
15 UserDictionary::load(&data)
16 }
17
18 pub fn load_from_csv<P: AsRef<Path>>(
21 builder: DictionaryBuilder,
22 path: P,
23 ) -> LinderaResult<UserDictionary> {
24 builder.build_user_dict(path.as_ref())
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use std::path::PathBuf;
31
32 use super::UserDictionaryLoader;
33
34 #[test]
40 fn test_load_all_prebuilt_bin_fixtures() {
41 let user_dict_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
42 .join("../resources")
43 .join("user_dict");
44
45 for name in [
46 "ipadic_simple_userdic.bin",
47 "unidic_simple_userdic.bin",
48 "cc-cedict_simple_userdic.bin",
49 "jieba_simple_userdic.bin",
50 "ko-dic_simple_userdic.bin",
51 ] {
52 let result = UserDictionaryLoader::load_from_bin(user_dict_dir.join(name));
53 assert!(
54 result.is_ok(),
55 "failed to load prebuilt user dictionary fixture {name}: {:?}",
56 result.err()
57 );
58 }
59 }
60}