ipld_nostd/multihash/
error.rs1use {
2 crate::varint,
3 core2::{error::Error as StdError, io},
4 varint::decode,
5};
6
7#[derive(Debug)]
10pub struct Error {
11 kind: Kind,
12}
13
14impl Error {
15 pub(crate) const fn invalid_size(size: u64) -> Self {
16 Self {
17 kind: Kind::InvalidSize(size),
18 }
19 }
20
21 pub(crate) const fn insufficient_varint_bytes() -> Self {
22 Self {
23 kind: Kind::Varint(decode::Error::Insufficient),
24 }
25 }
26
27 pub(crate) const fn varint_overflow() -> Self {
28 Self {
29 kind: Kind::Varint(decode::Error::Overflow),
30 }
31 }
32}
33
34impl core::fmt::Display for Error {
35 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
36 self.kind.fmt(f)
37 }
38}
39
40#[derive(Debug)]
41enum Kind {
42 Io(io::Error),
44 InvalidSize(u64),
46 Varint(decode::Error),
48}
49
50pub(crate) fn varint_decode_to_multihash_error(
51 err: varint::decode::Error,
52) -> Error {
53 Error {
54 kind: Kind::Varint(err),
55 }
56}
57
58pub(crate) fn io_to_multihash_error(err: io::Error) -> Error {
59 Error {
60 kind: Kind::Io(err),
61 }
62}
63
64impl core::fmt::Display for Kind {
65 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
66 match self {
67 Self::Io(err) => write!(f, "{err}"),
68 Self::InvalidSize(size) => write!(f, "Invalid multihash size {size}."),
69 Self::Varint(err) => write!(f, "{err}"),
70 }
71 }
72}
73
74impl StdError for Error {
75 fn source(&self) -> Option<&(dyn StdError + 'static)> {
76 match &self.kind {
77 Kind::Io(inner) => Some(inner),
78 Kind::InvalidSize(_) => None,
79 Kind::Varint(_) => None, }
81 }
82}