multiversx_sc_codec/
codec_err_handler.rs

1use core::convert::Infallible;
2
3use crate::{DecodeError, EncodeError};
4
5pub trait EncodeErrorHandler: Copy {
6    type HandledErr: 'static;
7
8    fn handle_error(&self, err: EncodeError) -> Self::HandledErr;
9}
10
11pub trait DecodeErrorHandler: Copy {
12    type HandledErr: 'static;
13
14    fn handle_error(&self, err: DecodeError) -> Self::HandledErr;
15}
16
17impl EncodeErrorHandler for DefaultErrorHandler {
18    type HandledErr = EncodeError;
19
20    #[inline]
21    fn handle_error(&self, err: EncodeError) -> Self::HandledErr {
22        err
23    }
24}
25
26/// The simplest error handler, it simply passes the error on.
27#[derive(Clone, Copy)]
28pub struct DefaultErrorHandler;
29
30impl DecodeErrorHandler for DefaultErrorHandler {
31    type HandledErr = DecodeError;
32
33    #[inline]
34    fn handle_error(&self, err: DecodeError) -> Self::HandledErr {
35        err
36    }
37}
38
39/// An error handler that panics immediately, instead of returning a `Result`.
40#[derive(Clone, Copy)]
41pub struct PanicErrorHandler;
42
43impl EncodeErrorHandler for PanicErrorHandler {
44    type HandledErr = Infallible;
45
46    #[inline]
47    fn handle_error(&self, err: EncodeError) -> Self::HandledErr {
48        panic!("Encode error occured: {}", err.message_str())
49    }
50}
51
52impl DecodeErrorHandler for PanicErrorHandler {
53    type HandledErr = Infallible;
54
55    #[inline]
56    fn handle_error(&self, err: DecodeError) -> Self::HandledErr {
57        panic!("Decode error occured: {}", err.message_str())
58    }
59}