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)]
35pub enum Cycle {
37 Normal,
38 Variant,
39 Lost,
40}
41
42#[derive(Debug, Error)]
43pub 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)]
103pub 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}