we_cdk/macros/
storage.rs

1/// Checks if a record with this key exists
2///
3/// # Usage
4/// ```
5/// use we_cdk::*;
6///
7/// #[action]
8/// fn _constructor() {
9///     let address = base58!("3NzkzibVRkKUzaRzjUxndpTPvoBzQ3iLng3");
10///
11///     let result: Boolean = contains_key!("boolean_key");
12///     let result: Boolean = contains_key!(address => "integer_key");
13/// }
14/// ```
15#[macro_export]
16macro_rules! contains_key {
17    ($key:expr) => {{
18        let this = internal_data!(this);
19        let (error, result) =
20            wevm::v0::bindings::contains_key(this.0, this.1, $key.as_ptr(), $key.len());
21        error!(error);
22        result
23    }};
24    ($address:expr => $key:expr) => {{
25        let (error, result) = wevm::v0::bindings::contains_key(
26            $address.as_ptr(),
27            $address.len(),
28            $key.as_ptr(),
29            $key.len(),
30        );
31        error!(error);
32        result
33    }};
34}
35
36/// Get storage
37///
38/// # Usage
39/// ```
40/// use we_cdk::*;
41///
42/// #[action]
43/// fn _constructor() {
44///     let address = base58!("3NzkzibVRkKUzaRzjUxndpTPvoBzQ3iLng3");
45///
46///     let integer_value: Integer = get_storage!(integer :: "integer_key");
47///     let boolean_value: Boolean = get_storage!(boolean :: "boolean_key");
48///     let binary_value: Binary = get_storage!(binary :: "binary_key");
49///     let string_value: String = get_storage!(string :: "string_key");
50///
51///     let address_int_value = get_storage!(integer :: address => "integer_key");
52/// }
53/// ```
54#[macro_export]
55macro_rules! get_storage {
56    (integer :: $key:expr) => {{
57        let this = internal_data!(this);
58        let (error, value) =
59            wevm::v0::bindings::get_storage_int(this.0, this.1, $key.as_ptr(), $key.len());
60        error!(error);
61        value
62    }};
63    (integer :: $address:expr => $key:expr) => {{
64        let (error, value) = wevm::v0::bindings::get_storage_int(
65            $address.as_ptr(),
66            $address.len(),
67            $key.as_ptr(),
68            $key.len(),
69        );
70        error!(error);
71        value
72    }};
73    (boolean :: $key:expr) => {{
74        let this = internal_data!(this);
75        let (error, value) =
76            wevm::v0::bindings::get_storage_bool(this.0, this.1, $key.as_ptr(), $key.len());
77        error!(error);
78        value
79    }};
80    (boolean :: $address:expr => $key:expr) => {{
81        let (error, value) = wevm::v0::bindings::get_storage_bool(
82            $address.as_ptr(),
83            $address.len(),
84            $key.as_ptr(),
85            $key.len(),
86        );
87        error!(error);
88        value
89    }};
90    (binary :: $key:expr) => {{
91        let this = internal_data!(this);
92        let (error, ptr, len) =
93            wevm::v0::bindings::get_storage_binary(this.0, this.1, $key.as_ptr(), $key.len());
94        error!(error);
95        core::slice::from_raw_parts(ptr, len)
96    }};
97    (binary :: $address:expr => $key:expr) => {{
98        let (error, ptr, len) = wevm::v0::bindings::get_storage_binary(
99            $address.as_ptr(),
100            $address.len(),
101            $key.as_ptr(),
102            $key.len(),
103        );
104        error!(error);
105        core::slice::from_raw_parts(ptr, len)
106    }};
107    (string :: $key:expr) => {{
108        let this = internal_data!(this);
109        let (error, ptr, len) =
110            wevm::v0::bindings::get_storage_string(this.0, this.1, $key.as_ptr(), $key.len());
111        error!(error);
112        let bytes = core::slice::from_raw_parts(ptr, len);
113        core::str::from_utf8_unchecked(bytes)
114    }};
115    (string :: $address:expr => $key:expr) => {{
116        let (error, ptr, len) = wevm::v0::bindings::get_storage_string(
117            $address.as_ptr(),
118            $address.len(),
119            $key.as_ptr(),
120            $key.len(),
121        );
122        error!(error);
123        let bytes = core::slice::from_raw_parts(ptr, len);
124        core::str::from_utf8_unchecked(bytes)
125    }};
126}
127
128/// Set storage
129///
130/// # Usage
131/// ```
132/// use we_cdk::*;
133///
134/// #[action]
135/// fn _constructor() {
136///     set_storage!(integer :: "integer_key" => 42);
137///     set_storage!(boolean :: "boolean_key" => true);
138///     set_storage!(binary :: "binary_key" => &[0, 1]);
139///     set_storage!(string :: "string_key" => "test");
140/// }
141/// ```
142#[macro_export]
143macro_rules! set_storage {
144    (integer :: $key:expr => $value:expr) => {{
145        let error = wevm::v0::bindings::set_storage_int($key.as_ptr(), $key.len(), $value);
146        error!(error);
147    }};
148    (boolean :: $key:expr => $value:expr) => {
149        let error = wevm::v0::bindings::set_storage_bool($key.as_ptr(), $key.len(), $value);
150        error!(error);
151    };
152    (binary :: $key:expr => $value:expr) => {
153        let error = wevm::v0::bindings::set_storage_binary(
154            $key.as_ptr(),
155            $key.len(),
156            $value.as_ptr(),
157            $value.len(),
158        );
159        error!(error);
160    };
161    (string :: $key:expr => $value:expr) => {
162        let error = wevm::v0::bindings::set_storage_string(
163            $key.as_ptr(),
164            $key.len(),
165            $value.as_ptr(),
166            $value.len(),
167        );
168        error!(error);
169    };
170}