use std::fmt;
pub type Result<T> = std::result::Result<T, ParseError>;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum ParseError {
UnbalancedAngleBracketsExtraClose,
UnbalancedAngleBracketsMissingClose,
UnbalancedParensExtraClose,
UnbalancedParensMissingClose,
CommaAtStart,
TrailingComma,
DoubleComma,
InvalidStructType(String),
InvalidFieldDefinition(String),
EmptyTypeString,
InvalidDecimalType(String),
InvalidArrayType(String),
InvalidMapType(String),
}
impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ParseError::UnbalancedAngleBracketsExtraClose => {
write!(f, "Unbalanced angle brackets: extra '>'")
}
ParseError::UnbalancedAngleBracketsMissingClose => {
write!(f, "Unbalanced angle brackets: missing '>'")
}
ParseError::UnbalancedParensExtraClose => {
write!(f, "Unbalanced parentheses: extra ')'")
}
ParseError::UnbalancedParensMissingClose => {
write!(f, "Unbalanced parentheses: missing ')'")
}
ParseError::CommaAtStart => {
write!(f, "Invalid field definition: comma at start")
}
ParseError::TrailingComma => {
write!(f, "Invalid field definition: trailing comma")
}
ParseError::DoubleComma => {
write!(f, "Invalid field definition: double comma")
}
ParseError::InvalidStructType(s) => {
write!(f, "Invalid struct type: {}", s)
}
ParseError::InvalidFieldDefinition(s) => {
write!(f, "Invalid field definition: {}", s)
}
ParseError::EmptyTypeString => {
write!(f, "Invalid type: empty type string")
}
ParseError::InvalidDecimalType(s) => {
write!(f, "Invalid decimal type: {}", s)
}
ParseError::InvalidArrayType(s) => {
write!(f, "Invalid array type: {}", s)
}
ParseError::InvalidMapType(s) => {
write!(f, "Invalid map type: {}", s)
}
}
}
}
impl std::error::Error for ParseError {}