#[macro_export]
macro_rules! embedded_dictionary {
($dir:literal, $loader:ident) => {
static CHAR_DEFINITION_DATA: &[u8] =
include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/char_def.bin"));
static CONNECTION_DATA: &[u8] =
include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/matrix.mtx"));
static DA_DATA: &[u8] = include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.da"));
static VALS_DATA: &[u8] =
include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.vals"));
static UNKNOWN_DATA: &[u8] =
include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/unk.bin"));
static WORDS_IDX_DATA: &[u8] =
include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.wordsidx"));
static WORDS_DATA: &[u8] =
include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/dict.words"));
static METADATA_DATA: &[u8] =
include_bytes!(concat!(env!("LINDERA_WORKDIR"), $dir, "/metadata.json"));
pub fn load() -> $crate::LinderaResult<$crate::dictionary::Dictionary> {
let metadata = $crate::dictionary::metadata::Metadata::load(METADATA_DATA)?;
let prefix_dictionary = $crate::dictionary::prefix_dictionary::PrefixDictionary::load(
DA_DATA,
VALS_DATA,
WORDS_IDX_DATA,
WORDS_DATA,
true,
$crate::dictionary::prefix_dictionary::DaTrust::Trusted,
)?;
let connection_cost_matrix =
$crate::dictionary::connection_cost_matrix::ConnectionCostMatrix::load(
CONNECTION_DATA,
)?;
let character_definition =
$crate::dictionary::character_definition::CharacterDefinition::load(
CHAR_DEFINITION_DATA,
)?;
let unknown_dictionary =
$crate::dictionary::unknown_dictionary::UnknownDictionary::load(UNKNOWN_DATA)?;
Ok($crate::dictionary::Dictionary {
prefix_dictionary: ::std::sync::Arc::new(prefix_dictionary),
connection_cost_matrix: ::std::sync::Arc::new(connection_cost_matrix),
character_definition,
unknown_dictionary,
metadata,
})
}
pub struct $loader;
impl Default for $loader {
fn default() -> Self {
Self::new()
}
}
impl $loader {
pub fn new() -> Self {
Self
}
}
impl $crate::loader::DictionaryLoader for $loader {
fn load(&self) -> $crate::LinderaResult<$crate::dictionary::Dictionary> {
load()
}
}
};
}