bspc_rs/parser/
errors.rs

1use core::fmt;
2use std::error::Error;
3use std::num::{ParseFloatError, ParseIntError};
4use std::str::ParseBoolError;
5use std::string::FromUtf8Error;
6
7#[derive(Debug)]
8#[non_exhaustive]
9pub enum ParseError {
10    InsufficientData,
11    InvalidEvent,
12    ConversionFailed,
13}
14
15impl Error for ParseError {}
16
17impl fmt::Display for ParseError {
18    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19        match self {
20            ParseError::InsufficientData => {
21                write!(f, "Insufficient data was provided")
22            }
23            ParseError::InvalidEvent => {
24                write!(f, "Event of different type was provided")
25            }
26            ParseError::ConversionFailed => {
27                write!(f, "Conversion failed")
28            }
29        }
30    }
31}
32
33impl From<ParseIntError> for ParseError {
34    fn from(_error: ParseIntError) -> ParseError {
35        ParseError::ConversionFailed
36    }
37}
38
39impl From<ParseBoolError> for ParseError {
40    fn from(_error: ParseBoolError) -> ParseError {
41        ParseError::ConversionFailed
42    }
43}
44
45impl From<ParseFloatError> for ParseError {
46    fn from(_error: ParseFloatError) -> ParseError {
47        ParseError::ConversionFailed
48    }
49}
50
51impl From<serde_json::Error> for ParseError {
52    fn from(_error: serde_json::Error) -> ParseError {
53        ParseError::ConversionFailed
54    }
55}
56
57impl From<strum::ParseError> for ParseError {
58    fn from(_error: strum::ParseError) -> ParseError {
59        ParseError::ConversionFailed
60    }
61}
62
63impl From<FromUtf8Error> for ParseError {
64    fn from(_error: FromUtf8Error) -> ParseError {
65        ParseError::ConversionFailed
66    }
67}