1#[macro_export]
6macro_rules! imports {
7 () => {
8 use multiversx_sc::imports::*;
9 };
10}
11
12#[macro_export]
14macro_rules! derive_imports {
15 () => {
16 use multiversx_sc::derive_imports::*;
17 };
18}
19
20#[deprecated(
22 since = "0.48.0",
23 note = "Use `sc_panic!` instead, which terminates immediately."
24)]
25#[macro_export]
26macro_rules! sc_error {
27 ($s:expr) => {
28 multiversx_sc::types::SCResult::Err(multiversx_sc::types::StaticSCError::from($s)).into()
29 };
30}
31
32#[deprecated(
50 since = "0.48.0",
51 note = "Use `require!` instead, which terminates immediately."
52)]
53#[macro_export]
54macro_rules! require_old {
55 ($expression:expr, $error_msg:expr) => {
56 if (!($expression)) {
57 return multiversx_sc::sc_error!($error_msg);
58 }
59 };
60}
61
62#[macro_export]
63macro_rules! sc_panic {
64 ($msg:tt, $($arg:expr),+ $(,)?) => {{
65 let mut ___buffer___ =
66 multiversx_sc::types::ManagedBufferBuilder::<Self::Api>::new_from_slice(&[]);
67 multiversx_sc::derive::format_receiver_args!(___buffer___, $msg, $($arg),+);
68 multiversx_sc::contract_base::ErrorHelper::<Self::Api>::signal_error_with_message(___buffer___.into_managed_buffer());
69 }};
70 ($msg:expr $(,)?) => {
71 multiversx_sc::contract_base::ErrorHelper::<Self::Api>::signal_error_with_message($msg);
72 };
73}
74
75#[macro_export]
101macro_rules! require {
102 ($expression:expr, $($msg_tokens:tt),+ $(,)?) => {
103 if (!($expression)) {
104 multiversx_sc::sc_panic!($($msg_tokens),+);
105 }
106 };
107}
108
109#[macro_export]
110macro_rules! sc_print {
111 ($msg:tt, $($arg:expr),* $(,)?) => {{
112 let mut ___buffer___ =
113 <<Self::Api as multiversx_sc::api::PrintApi>::PrintApiImpl as multiversx_sc::api::PrintApiImpl>::Buffer::default();
114 multiversx_sc::derive::format_receiver_args!(___buffer___, $msg, $($arg),*);
115 <<Self::Api as multiversx_sc::api::PrintApi>::PrintApiImpl as multiversx_sc::api::PrintApiImpl>::print_buffer(
116 &<Self::Api as multiversx_sc::api::PrintApi>::print_api_impl(),
117 ___buffer___,
118 );
119 }};
120}
121
122#[macro_export]
123macro_rules! sc_format {
124 ($msg:tt, $($arg:expr),+ $(,)?) => {{
125 let mut ___buffer___ =
126 multiversx_sc::types::ManagedBufferBuilder::<Self::Api>::new_from_slice(&[]);
127 multiversx_sc::derive::format_receiver_args!(___buffer___, $msg, $($arg),+);
128 ___buffer___.into_managed_buffer()
129 }};
130 ($msg:expr $(,)?) => {{
131 multiversx_sc::types::ManagedBuffer::new_from_bytes($msg.as_bytes())
132 }};
133}
134
135#[deprecated(
137 since = "0.16.0",
138 note = "The `?` operator can now be used on `SCResult`, please use it instead."
139)]
140#[macro_export]
141macro_rules! sc_try {
142 ($s:expr) => {
143 match $s {
144 multiversx_sc::types::SCResult::Ok(t) => t,
145 multiversx_sc::types::SCResult::Err(e) => {
146 return multiversx_sc::types::SCResult::Err(e);
147 },
148 }
149 };
150}
151
152#[deprecated(
169 since = "0.26.0",
170 note = "Replace with the `#[only_owner]` attribute that can be placed on an endpoint. That one is more compact and shows up in the ABI."
171)]
172#[macro_export]
173macro_rules! only_owner {
174 ($trait_self: expr, $error_msg:expr) => {
175 if ($trait_self.blockchain().get_caller() != $trait_self.blockchain().get_owner_address()) {
176 return multiversx_sc::sc_error!($error_msg);
177 }
178 };
179}
180
181#[macro_export]
183macro_rules! non_zero_usize {
184 ($input: expr, $error_msg:expr) => {
185 NonZeroUsize::new($input).unwrap_or_else(|| sc_panic!($error_msg))
186 };
187}