jbytes/
errors.rs

1#[cfg(not(feature = "std"))]
2pub use thiserror_no_std::Error as ThisError;
3#[cfg(feature = "std")]
4pub use thiserror::Error as ThisError;
5use crate::std::*;
6
7
8pub type JResult<O, E = Error> = Result<O, E>;
9
10
11#[derive(Debug, PartialEq, Eq)]
12pub struct Error {
13    pub position: usize,
14    pub code: ErrorKind,
15}
16
17
18impl Error {
19    pub fn new(position: usize, kind: ErrorKind) -> Self {
20        Self { position, code: kind }
21    }
22}
23
24
25impl fmt::Display for Error {
26    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {     
27           write!(f, "[ERROR]: {}, position: {}", self.code, self.position)
28    }
29}
30
31
32pub trait ParseError {
33    fn from_error_kind(position: usize, kind: ErrorKind) -> Self;
34}
35
36
37impl ParseError for Error {
38    fn from_error_kind(position: usize, kind: ErrorKind) -> Self {
39        Error::new(position, kind)
40    }
41}
42
43
44#[derive(Debug, PartialEq, Eq, ThisError)]
45pub enum ErrorKind {
46    #[error("invalid byte length")]
47    InvalidByteLength,
48    #[error("find subsequence failure")]
49    SubSequence,
50    #[error("parse byte failure")]
51    Fail,
52    #[error("invalid position ({0})")]
53    InvalidPosition(usize),
54    #[error("invalid buffer memory")]
55    PushFail,
56    #[error("invalid value ({0})")]
57    InvalidValue(String),
58}
59
60
61#[inline]
62pub fn make_error<E: ParseError>(position: usize, kind: ErrorKind) -> E {
63    E::from_error_kind(position, kind)
64}