1use {
2 ndarray::ShapeError,
3 ort::Error as OrtError,
4 pest::error::Error as PestError,
5 rodio::decoder::DecoderError,
6 std::{
7 cmp::Ord,
8 error::Error,
9 fmt::{Debug, Display, Formatter, Result as FmtResult},
10 hash::Hash,
11 io::Error as IoError,
12 time::SystemTimeError,
13 },
14};
15
16#[derive(Debug)]
17pub enum GSVError {
18 Box(Box<dyn Error + Send + Sync>),
19 Decoder(DecoderError),
20 DecodeTokenFailed,
21 GeneratePhonemesOrBertFeaturesFailed(String),
22 InputEmpty,
23 Io(IoError),
24 Ort(OrtError),
25 Pest(String),
26 Shape(ShapeError),
27 SystemTime(SystemTimeError),
28 UnknownRuleAll(String),
29 UnknownRuleIdent(String),
30 UnknownRuleWord(String),
31 UnknownGreekLetter(String),
32 UnknownOperator(String),
33 UnknownFlag(String),
34 UnknownRuleInPercent(String),
35 UnknownDigit(String),
36 UnknownRuleInNum(String),
37 UnknownRuleInSigns(String),
38}
39
40impl Error for GSVError {}
41
42impl Display for GSVError {
43 fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
44 write!(f, "GSVError: ")?;
45 match self {
46 Self::Box(e) => Display::fmt(e, f),
47 Self::Decoder(e) => Display::fmt(e, f),
48 Self::DecodeTokenFailed => {
49 write!(f, "DecodeTokenFailedError: Can't decode output audio.")
50 }
51 Self::GeneratePhonemesOrBertFeaturesFailed(s) => write!(
52 f,
53 "GeneratePhonemesOrBertFeaturesFailedError: No phonemes or BERT features could be generated for the text: {}",
54 s
55 ),
56 Self::InputEmpty => write!(f, "InputEmptyError: Input data is empty."),
57 Self::Io(e) => Display::fmt(e, f),
58 Self::Ort(e) => Display::fmt(e, f),
59 Self::Pest(s) => write!(f, "PestError: {}", s),
60 Self::Shape(e) => Display::fmt(e, f),
61 Self::SystemTime(e) => Display::fmt(e, f),
62 Self::UnknownRuleAll(s) => {
63 write!(f, "UnknownRuleAllError: Unknown rule in all: {:?}", s)
64 }
65 Self::UnknownRuleIdent(s) => {
66 write!(f, "UnknownRuleIdentError: Unknown rule in ident: {:?}", s)
67 }
68 Self::UnknownRuleWord(s) => {
69 write!(f, "UnknownRuleWordError: Unknown rule in word: {:?}", s)
70 }
71 Self::UnknownGreekLetter(s) => {
72 write!(f, "UnknownGreekLetterError: Unknown Greek letter: {:?}", s)
73 }
74 Self::UnknownOperator(s) => {
75 write!(f, "UnknownOperatorError: Unknown operator: {:?}", s)
76 }
77 Self::UnknownFlag(s) => {
78 write!(f, "UnknownFlagError: Unknown flag: {:?}", s)
79 }
80 Self::UnknownRuleInPercent(s) => {
81 write!(
82 f,
83 "UnknownRuleInPercentError: Unknown rule in percent: {:?}",
84 s
85 )
86 }
87 Self::UnknownDigit(s) => {
88 write!(f, "UnknownDigitError: Unknown digit: {:?}", s)
89 }
90 Self::UnknownRuleInNum(s) => {
91 write!(f, "UnknownRuleInNumError: Unknown rule in num: {:?}", s)
92 }
93 Self::UnknownRuleInSigns(s) => {
94 write!(f, "UnknownRuleInSignsError: Unknown rule in signs: {:?}", s)
95 }
96 }
97 }
98}
99
100impl From<OrtError> for GSVError {
101 fn from(value: OrtError) -> Self {
102 Self::Ort(value)
103 }
104}
105
106impl From<IoError> for GSVError {
107 fn from(value: IoError) -> Self {
108 Self::Io(value)
109 }
110}
111
112impl From<ShapeError> for GSVError {
113 fn from(value: ShapeError) -> Self {
114 Self::Shape(value)
115 }
116}
117
118impl From<SystemTimeError> for GSVError {
119 fn from(value: SystemTimeError) -> Self {
120 Self::SystemTime(value)
121 }
122}
123
124impl From<Box<dyn Error + Send + Sync>> for GSVError {
125 fn from(value: Box<dyn Error + Send + Sync>) -> Self {
126 Self::Box(value)
127 }
128}
129
130impl<R> From<PestError<R>> for GSVError
131where
132 R: Copy + Debug + Hash + Ord,
133{
134 fn from(value: PestError<R>) -> Self {
135 Self::Pest(format!("{}", value))
136 }
137}
138
139impl From<DecoderError> for GSVError {
140 fn from(value: DecoderError) -> Self {
141 Self::Decoder(value)
142 }
143}