pub mod english;
#[cfg(test)]
mod fixtures;
pub mod hanzi;
pub mod pinyin;
use rusqlite::types::ValueRef;
use rusqlite::Row;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DictRow {
pub key: String,
pub value: String,
pub weight: i64,
}
fn sql_limit(limit: usize) -> i64 {
limit.min(i32::MAX as usize) as i64
}
fn column_text(row: &Row<'_>, index: usize) -> rusqlite::Result<String> {
Ok(match row.get_ref(index)? {
ValueRef::Null => String::new(),
ValueRef::Text(bytes) | ValueRef::Blob(bytes) => {
String::from_utf8_lossy(bytes).into_owned()
}
ValueRef::Integer(value) => value.to_string(),
ValueRef::Real(value) => value.to_string(),
})
}
fn column_i64(row: &Row<'_>, index: usize) -> rusqlite::Result<i64> {
Ok(match row.get_ref(index)? {
ValueRef::Integer(value) => value,
ValueRef::Real(value) => value as i64,
ValueRef::Null => 0,
ValueRef::Text(bytes) | ValueRef::Blob(bytes) => std::str::from_utf8(bytes)
.ok()
.and_then(|text| text.trim().parse().ok())
.unwrap_or(0),
})
}