multiversx_sc/io/
arg_error_handler.rs

1use core::{convert::Infallible, marker::PhantomData};
2
3use crate::{
4    api::{ErrorApi, ManagedTypeApi},
5    codec::*,
6    io::{signal_arg_de_error, ArgId},
7};
8
9#[derive(Clone)]
10pub struct ArgErrorHandler<M>
11where
12    M: ManagedTypeApi + ErrorApi,
13{
14    _phantom: PhantomData<M>,
15    pub arg_id: ArgId,
16}
17
18impl<M> Copy for ArgErrorHandler<M> where M: ManagedTypeApi + ErrorApi {}
19
20impl<M> From<ArgId> for ArgErrorHandler<M>
21where
22    M: ManagedTypeApi + ErrorApi,
23{
24    fn from(arg_id: ArgId) -> Self {
25        ArgErrorHandler {
26            _phantom: PhantomData,
27            arg_id,
28        }
29    }
30}
31
32impl<M> DecodeErrorHandler for ArgErrorHandler<M>
33where
34    M: ManagedTypeApi + ErrorApi,
35{
36    type HandledErr = Infallible;
37
38    #[inline(always)]
39    fn handle_error(&self, err: DecodeError) -> Self::HandledErr {
40        signal_arg_de_error::<M>(self.arg_id, err)
41    }
42}