Skip to main content

pkgar_core/
error.rs

1use alloc::format;
2use alloc::string::ToString;
3use core::error;
4use core::fmt::{Display, Formatter, Result};
5
6#[derive(Debug)]
7pub enum Error {
8    Cast(bytemuck::PodCastError),
9    Dryoc(dryoc::Error),
10    InvalidBlake3,
11    InvalidData,
12    InvalidKey,
13    InvalidMode(u32),
14    NotSupported,
15    Overflow,
16    TryFromInt(core::num::TryFromIntError),
17}
18
19impl Display for Error {
20    fn fmt(&self, f: &mut Formatter) -> Result {
21        use Error::*;
22
23        let msg = match self {
24            Dryoc(err) => format!("Dryoc: {:?}", err),
25            InvalidBlake3 => "Invalid Blake3".to_string(),
26            InvalidData => "Data Invalid".to_string(),
27            InvalidKey => "Key Invalid".to_string(),
28            InvalidMode(mode) => format!("Invalid Mode: {:o}", mode),
29            Cast(err) => format!("Bytemuck: {}", err),
30            NotSupported => "Data Not Supported".to_string(),
31            Overflow => "Overflow".to_string(),
32            TryFromInt(err) => format!("TryFromInt: {}", err),
33        };
34        write!(f, "{}", msg)
35    }
36}
37
38impl error::Error for Error {
39    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
40        match self {
41            Self::Cast(e) => Some(e),
42            Self::Dryoc(e) => Some(e),
43            Self::TryFromInt(e) => Some(e),
44            _ => None,
45        }
46    }
47}
48
49impl From<dryoc::Error> for Error {
50    fn from(err: dryoc::Error) -> Error {
51        Error::Dryoc(err)
52    }
53}
54
55impl From<core::num::TryFromIntError> for Error {
56    fn from(err: core::num::TryFromIntError) -> Error {
57        Error::TryFromInt(err)
58    }
59}
60
61impl From<bytemuck::PodCastError> for Error {
62    fn from(err: bytemuck::PodCastError) -> Self {
63        Self::Cast(err)
64    }
65}