use derive_more::Display;
use std::{result, str::Utf8Error};
use thiserror::Error;
#[derive(Debug, Error, PartialEq, Eq)]
#[error("parse error: {kind}")]
pub struct ParseError {
kind: ParseErrorKind,
}
#[derive(Clone, Eq, PartialEq, Debug, Display)]
#[allow(clippy::enum_variant_names)]
pub enum ParseErrorKind {
#[display(fmt = "Invalid command")]
InvalidCommand,
#[display(fmt = "Non-UTF8 character while parsing")]
InvalidUtf8,
#[display(fmt = "Invalid end-of-line")]
InvalidEol,
}
impl ParseError {
pub fn kind(&self) -> &ParseErrorKind {
&self.kind
}
}
impl From<ParseErrorKind> for ParseError {
fn from(kind: ParseErrorKind) -> ParseError {
ParseError { kind }
}
}
impl From<Utf8Error> for ParseError {
fn from(_: Utf8Error) -> ParseError {
ParseError {
kind: ParseErrorKind::InvalidUtf8,
}
}
}
pub type Result<T> = result::Result<T, ParseError>;