multiversx_sc/types/interaction/result_handlers/
returns_result.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use multiversx_sc_codec::TopDecodeMulti;

use crate::types::{
    interaction::decode_result, DeployRawResult, RHListItem, RHListItemExec, SyncCallRawResult,
    TxEnv,
};

/// Indicates that result will be returned.
///
/// Value will be decoded according to the type defined in the smart contract.
pub struct ReturnsResult;

impl<Env, Original> RHListItem<Env, Original> for ReturnsResult
where
    Env: TxEnv,
{
    type Returns = Original;
}

impl<Env, Original> RHListItemExec<SyncCallRawResult<Env::Api>, Env, Original> for ReturnsResult
where
    Env: TxEnv,
    Original: TopDecodeMulti,
{
    fn item_process_result(self, raw_result: &SyncCallRawResult<Env::Api>) -> Original {
        decode_result::<Env::Api, Original>(raw_result.0.clone())
    }
}

impl<Env, Original> RHListItemExec<DeployRawResult<Env::Api>, Env, Original> for ReturnsResult
where
    Env: TxEnv,
    Original: TopDecodeMulti,
{
    fn item_process_result(self, raw_result: &DeployRawResult<Env::Api>) -> Original {
        decode_result::<Env::Api, Original>(raw_result.raw_results.clone())
    }
}