multiversx_sc_derive/model/
argument.rs

1use super::EsdtAttribute;
2
3/// Models any method argument from a contract, module or callable proxy trait.
4/// Contains processed data from argument annotations.
5#[derive(Clone, Debug)]
6pub struct MethodArgument {
7    pub original_pat: syn::Pat,
8    pub pat: syn::Pat,
9    pub ty: syn::Type,
10    pub unprocessed_attributes: Vec<syn::Attribute>,
11    pub metadata: ArgMetadata,
12}
13
14/// Models any method argument from a contract, module or callable proxy trait.
15#[derive(Clone, Debug)]
16pub struct ArgMetadata {
17    pub payment: ArgPaymentMetadata,
18    pub callback_call_result: bool,
19    pub event_topic: bool,
20}
21
22impl Default for ArgMetadata {
23    fn default() -> Self {
24        ArgMetadata {
25            payment: ArgPaymentMetadata::NotPayment,
26            callback_call_result: false,
27            event_topic: false,
28        }
29    }
30}
31
32#[derive(Clone, Debug)]
33pub enum ArgPaymentMetadata {
34    NotPayment,
35    PaymentAmount,
36    PaymentToken,
37    PaymentNonce,
38    PaymentMulti,
39}
40
41impl ArgPaymentMetadata {
42    pub fn is_payment_arg(&self) -> bool {
43        matches!(
44            self,
45            ArgPaymentMetadata::PaymentAmount
46                | ArgPaymentMetadata::PaymentToken
47                | ArgPaymentMetadata::PaymentNonce
48                | ArgPaymentMetadata::PaymentMulti
49        )
50    }
51}
52
53impl MethodArgument {
54    pub fn is_endpoint_arg(&self) -> bool {
55        matches!(self.metadata.payment, ArgPaymentMetadata::NotPayment)
56    }
57}
58
59#[derive(Clone, Debug, Default)]
60pub struct TraitProperties {
61    pub only_owner: bool,
62    pub only_admin: bool,
63    pub only_user_account: bool,
64    pub allow_multiple_var_args: bool,
65    pub esdt_attribute: Vec<EsdtAttribute>,
66}