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}