lindera_dictionary/
macros.rs1#[macro_export]
26macro_rules! embedded_dictionary {
27 ($dir:literal, $loader:ident) => {
28 const CHAR_DEFINITION_DATA: &[u8] =
29 include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/char_def.bin"));
30 const CONNECTION_DATA: &[u8] =
31 include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/matrix.mtx"));
32 const DA_DATA: &[u8] = include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.da"));
33 const VALS_DATA: &[u8] =
34 include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.vals"));
35 const UNKNOWN_DATA: &[u8] =
36 include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/unk.bin"));
37 const WORDS_IDX_DATA: &[u8] =
38 include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.wordsidx"));
39 const WORDS_DATA: &[u8] =
40 include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.words"));
41 const METADATA_DATA: &[u8] =
42 include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/metadata.json"));
43
44 pub fn load() -> $crate::LinderaResult<$crate::dictionary::Dictionary> {
46 let metadata = $crate::dictionary::metadata::Metadata::load(METADATA_DATA)?;
47 let prefix_dictionary = $crate::dictionary::prefix_dictionary::PrefixDictionary::load(
48 DA_DATA,
49 VALS_DATA,
50 WORDS_IDX_DATA,
51 WORDS_DATA,
52 true,
53 $crate::dictionary::prefix_dictionary::DaTrust::Trusted,
54 )?;
55 let connection_cost_matrix =
56 $crate::dictionary::connection_cost_matrix::ConnectionCostMatrix::load(
57 CONNECTION_DATA,
58 )?;
59 let character_definition =
60 $crate::dictionary::character_definition::CharacterDefinition::load(
61 CHAR_DEFINITION_DATA,
62 )?;
63 let unknown_dictionary =
64 $crate::dictionary::unknown_dictionary::UnknownDictionary::load(UNKNOWN_DATA)?;
65
66 Ok($crate::dictionary::Dictionary {
67 prefix_dictionary: ::std::sync::Arc::new(prefix_dictionary),
68 connection_cost_matrix: ::std::sync::Arc::new(connection_cost_matrix),
69 character_definition,
70 unknown_dictionary,
71 metadata,
72 })
73 }
74
75 pub struct $loader;
77
78 impl Default for $loader {
79 fn default() -> Self {
80 Self::new()
81 }
82 }
83
84 impl $loader {
85 pub fn new() -> Self {
86 Self
87 }
88 }
89
90 impl $crate::loader::DictionaryLoader for $loader {
91 fn load(&self) -> $crate::LinderaResult<$crate::dictionary::Dictionary> {
92 load()
93 }
94 }
95 };
96}