multiversx_sc/io/
arg_error_handler.rs1use 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}