dictx-parser 0.1.1

Dictionary source parsers for DictX.
Documentation
mod anki;
mod cedict;
mod dxdict;
mod ecdict;
mod html;
mod mdx;
mod sqlite_dict;
mod traits;

pub use anki::AnkiJsonlParser;
pub use cedict::CedictParser;
pub use dxdict::{
    write_dxdict, BuiltinDxdictParser, DxdictMetadata, DxdictParser, BUILTIN_KD_DATA_SOURCE,
    BUILTIN_NEW_CENTURY_SOURCE,
};
pub use ecdict::EcdictParser;
pub use mdx::MdxParser;
pub use sqlite_dict::SqliteDictParser;
pub use traits::*;

use dictx_core::{DictxError, Result};
use std::path::Path;

pub fn parser_for(format: &str) -> Result<Box<dyn DictParser>> {
    match format {
        "ecdict" | "csv" => Ok(Box::new(EcdictParser)),
        "anki" | "anki-jsonl" | "jsonl" => Ok(Box::new(AnkiJsonlParser)),
        "dxdict" | "dictx" | "dictx-pack" => Ok(Box::new(DxdictParser)),
        "builtin-dxdict" | "builtin" => Ok(Box::new(BuiltinDxdictParser)),
        "cedict" | "cc-cedict" => Ok(Box::new(CedictParser)),
        "sqlite" | "kd" | "kd-db" => Ok(Box::new(SqliteDictParser::default())),
        "mdx" | "mdict" => Ok(Box::new(MdxParser)),
        other => Err(DictxError::UnsupportedSource(format!(
            "未知词典格式: {other}"
        ))),
    }
}

pub fn parse_path(
    format: &str,
    path: &Path,
) -> Result<Box<dyn Iterator<Item = Result<dictx_core::DictEntry>>>> {
    parser_for(format)?.parse(path)
}