multiversx_sc_codec/
codec_err_handler.rs1use 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#[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#[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}