morph_rs/
errors.rs

1use crate::analyzer::{Parse, Tag};
2use std::path::PathBuf;
3use thiserror::Error;
4
5pub type MopsResult<T, E = MopsErr> = std::result::Result<T, E>;
6
7#[derive(Debug, Error)]
8pub enum MopsErr {
9    #[error("Couldn't open file {file}: {error}")]
10    File {
11        file: PathBuf,
12        error: std::io::Error,
13    },
14
15    #[error("IO err -> {0}")]
16    IO(#[from] std::io::Error),
17
18    #[error("XML deserialize err -> {0}")]
19    XMLde(#[from] quick_xml::DeError),
20
21    #[error("Serde err -> {0}")]
22    Serde(#[from] serde_json::error::Error),
23
24    #[error("Mops dictionary err -> {0}")]
25    Dictionary(#[from] DictionaryErr),
26
27    #[error("Fst map err -> {0}")]
28    FSTMap(#[from] fst::Error),
29
30    #[error("Parse err -> {0}")]
31    Parse(#[from] ParseErr),
32}
33
34#[derive(Debug, derive_more::Display)]
35/// На какой стадии была потеря леммы.
36pub enum Cycle {
37    Normal,
38    Variant,
39    Lost,
40}
41
42#[derive(Debug, Error)]
43/// Ошибки парсинга словаря `OpenCorpora` в словарь `Mops`-а.
44pub enum DictionaryErr {
45    #[error("Couldn't create outdir {outdir}: {error}")]
46    Outdir {
47        outdir: PathBuf,
48        error: std::io::Error,
49    },
50
51    #[error("Fst err -> {0}")]
52    FstBuild(#[from] fst::Error),
53
54    #[error("Lemma {0} in cycle {1} was lost during the parsing")]
55    LostLemmaId(u64, Cycle),
56
57    #[error("Binary search not found tag: {0:?}")]
58    BinaryTag(Tag),
59
60    #[error("Binary search not found vanga's tag: {0:?}")]
61    BinaryTagVanga(Tag),
62
63    #[error("Binary search not found lemma: {0}")]
64    BinaryLemma(String),
65
66    #[error("Binary search not found lemmas_row: {0:?}")]
67    BinaryRow(Vec<u32>),
68
69    #[error("Binary search not found parses: {0:?}")]
70    BinaryParse(Vec<Parse>),
71
72    #[error("Normal form {0} hasn't first grammemes")]
73    LostFirstGrammemes(String),
74
75    #[error("Empty LemmaVanga")]
76    EmptyVanga,
77
78    #[error("No word form in lemma {0}")]
79    NoForms(u64),
80
81    #[error("No word form in lemma {0}")]
82    NoFormsVanga(String),
83
84    #[error("Error strip suffix in {0}")]
85    Stem(String),
86}
87
88#[derive(Debug, derive_more::Display)]
89pub enum Bound {
90    #[display(fmt = "word_parses")]
91    WordParses,
92    #[display(fmt = "tags")]
93    Tags,
94    #[display(fmt = "lemmas")]
95    Lemmas,
96    #[display(fmt = "alphabet")]
97    Alphabet,
98    #[display(fmt = "lemmas_row")]
99    LemmasRow,
100}
101
102#[derive(Debug, Error)]
103/// Ошибки парсинга слова
104pub enum ParseErr {
105    #[error("Index of search {idx} more than {vec} len")]
106    OutOfBound { idx: u64, vec: Bound },
107
108    #[error("Word from dictionary {0} lost his normal form")]
109    LostNormalForm(String),
110
111    #[error("Word '{0}' parse lost lemma id")]
112    LostLemmaId(String),
113
114    #[error("Word '{0}' parse lost lemmas row id")]
115    LostLemmasRow(usize),
116
117    #[error("Analyzer lost parse {0:?}")]
118    LostParse(Tag),
119
120    #[error("To be continued...")]
121    FutureRelease,
122
123    #[error("No parte of speech in {0}")]
124    NoPos(String),
125
126    #[error("Declension err -> {0}")]
127    Declension(DeclensionErr),
128
129    #[error("Binary search not found tag: {0:?}")]
130    BinaryTag(Tag),
131}
132
133#[derive(Debug, Error)]
134pub enum DeclensionErr {
135    #[error("Word is empty")]
136    EmptyWord,
137
138    #[error("Binary search not found char {0} in alphabet")]
139    BinaryChar(char),
140
141    #[error("Index of search {idx} more than {vec} len")]
142    OutOfBound { idx: u64, vec: Bound },
143}