multiversx_sc/types/interaction/tx_result_handler_list/
tx_result_handler_list_exec.rsuse crate::types::{OriginalResultMarker, TxEnv};
use super::{ConsNoRet, ConsRet, RHList, RHListItem};
pub trait RHListItemExec<RawResult, Env, Original>: RHListItem<Env, Original>
where
Env: TxEnv,
{
fn item_tx_expect(&self, prev: Env::RHExpect) -> Env::RHExpect {
prev
}
fn item_process_result(self, raw_result: &RawResult) -> Self::Returns;
}
pub trait RHListExec<RawResult, Env>: RHList<Env>
where
Env: TxEnv,
{
fn list_tx_expect(&self) -> Env::RHExpect;
fn list_process_result(self, raw_result: &RawResult) -> Self::ListReturns;
}
impl<RawResult, Env> RHListExec<RawResult, Env> for ()
where
Env: TxEnv,
{
fn list_tx_expect(&self) -> Env::RHExpect {
Env::RHExpect::default()
}
fn list_process_result(self, _raw_result: &RawResult) -> Self::ListReturns {}
}
impl<RawResult, Env, O> RHListExec<RawResult, Env> for OriginalResultMarker<O>
where
Env: TxEnv,
{
fn list_tx_expect(&self) -> Env::RHExpect {
Env::RHExpect::default()
}
fn list_process_result(self, _raw_result: &RawResult) -> Self::ListReturns {}
}
impl<RawResult, Env, Head, Tail> RHListExec<RawResult, Env> for ConsRet<Env, Head, Tail>
where
Env: TxEnv,
Head: RHListItemExec<RawResult, Env, Tail::OriginalResult>,
Tail: RHListExec<RawResult, Env>,
{
fn list_tx_expect(&self) -> Env::RHExpect {
self.head.item_tx_expect(self.tail.list_tx_expect())
}
fn list_process_result(self, raw_result: &RawResult) -> Self::ListReturns {
let head_result = self.head.item_process_result(raw_result);
let tail_result = self.tail.list_process_result(raw_result);
(head_result, tail_result)
}
}
impl<RawResult, Env, Head, Tail> RHListExec<RawResult, Env> for ConsNoRet<Env, Head, Tail>
where
Env: TxEnv,
Head: RHListItemExec<RawResult, Env, Tail::OriginalResult, Returns = ()>,
Tail: RHListExec<RawResult, Env>,
{
fn list_tx_expect(&self) -> Env::RHExpect {
self.head.item_tx_expect(self.tail.list_tx_expect())
}
fn list_process_result(self, raw_result: &RawResult) -> Self::ListReturns {
self.head.item_process_result(raw_result);
self.tail.list_process_result(raw_result)
}
}