gpt_sovits/
error.rs

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}