@@ -16,20 +16,40 @@ use std::{
16
16
pub type MetacallFutureHandler = fn ( Box < dyn MetacallValue > , Box < dyn MetacallValue > ) ;
17
17
18
18
/// Represents MetacallFuture. Keep in mind that it's not supported to pass a future as an argument.
19
- /// Usage example: ...
19
+ ///
20
+ /// ## **Usage example:**
21
+ ///
22
+ /// **Javascript Code:**
23
+ /// ```javascript
24
+ /// function doubleValueAfterTime(value, delay) {
25
+ /// return new Promise((resolve, reject) => {
26
+ /// setTimeout(() => {
27
+ /// if (typeof value === 'number') {
28
+ /// resolve(value * 2); // Resolves if the value is a number
29
+ /// } else {
30
+ /// reject('Error: The provided value is not a number.'); // Rejects if the value is not a number
31
+ /// }
32
+ /// }, delay);
33
+ /// });
34
+ /// }
20
35
/// ```
36
+ ///
37
+ /// **Calling Example:**
38
+ /// ```rust
21
39
/// use metacall::{MetacallValue, MetacallFuture, metacall};
22
- ///
23
- /// fn resolve(result: impl MetacallValue, data: impl MetacallValue) {
24
- /// println!("Resolve:: result: {:#?}, data: {:#?}", result, data);
25
- /// }
26
- ///
27
- /// fn reject(result: impl MetacallValue, data: impl MetacallValue) {
28
- /// println!("Reject:: result: {:#?}, data: {:#?}", result, data);
40
+ /// fn runner(x: i32) {
41
+ ///
42
+ /// fn resolve(result: impl MetacallValue, data: impl MetacallValue) {
43
+ /// println!("Resolve:: result: {:#?}, data: {:#?}", result, data); //
44
+ /// }
45
+ ///
46
+ /// fn reject(error: impl MetacallValue, data: impl MetacallValue) {
47
+ /// println!("Reject:: error: {:#?}, data: {:#?}", error, data);
48
+ /// }
49
+ ///
50
+ /// let future = metacall::<MetacallFuture>("doubleValueAfterTime", [1, 2000]).unwrap();
51
+ /// future.then(resolve).catch(reject).await_fut();
29
52
/// }
30
- ///
31
- /// let future = metacall::<MetacallFuture>("async_function", [1]).unwrap();
32
- /// future.then(resolve).catch(reject).await_fut();
33
53
/// ```
34
54
#[ repr( C ) ]
35
55
pub struct MetacallFuture {
@@ -141,20 +161,88 @@ impl MetacallFuture {
141
161
}
142
162
143
163
/// Adds a resolve callback.
164
+ ///
165
+ /// ## **Usage example:**
166
+ ///
167
+ ///
168
+ /// ```javascript
169
+ /// // Javascript script
170
+ ///
171
+ /// function func_always_rejects(value, delay) {
172
+ /// return new Promise((resolve) => {
173
+ /// resolve('Resolve message.');
174
+ /// });
175
+ /// }
176
+ /// ```
177
+ /// **Calling Example:**
178
+ ///
179
+ /// ```rust
180
+ /// use metacall::{MetacallValue, MetacallFuture, metacall_no_args};
181
+ /// fn calling() {
182
+ /// fn reject(result: impl MetacallValue, _: impl MetacallValue) {
183
+ /// println!("Resolve:: {:#?}", result); // Resolve:: "Resolve message"
184
+ /// }
185
+ ///
186
+ /// let future = metacall_no_args::<MetacallFuture>("func_always_resolve").unwrap();
187
+ /// future.then(resolve).catch(reject).await_fut();
188
+ /// }
189
+ /// ```
144
190
pub fn then ( mut self , resolve : MetacallFutureHandler ) -> Self {
145
191
self . resolve = Some ( resolve) ;
146
-
192
+
147
193
self
148
194
}
149
-
195
+
150
196
/// Adds a reject callback.
197
+ ///
198
+ /// ## **Usage example:**
199
+ ///
200
+ /// ```javascript
201
+ /// // Javascript script
202
+ /// function func_always_rejects(value, delay) {
203
+ /// return new Promise((_, reject) => {
204
+ /// reject('Error: Reject message.');
205
+ /// });
206
+ /// }
207
+ /// ```
208
+ /// **Calling Example:**
209
+ /// ```rust
210
+ /// use metacall::{MetacallValue, MetacallFuture, metacall_no_args};
211
+ /// fn calling() {
212
+ /// fn reject(error: impl MetacallValue, _: impl MetacallValue) {
213
+ /// println!("Reject:: error: {:#?}", error); // Reject:: error: "Error: Reject message"
214
+ /// }
215
+ ///
216
+ /// let future = metacall_no_args::<MetacallFuture>("func_always_rejects").unwrap();
217
+ /// future.then(resolve).catch(reject).await_fut();
218
+ /// }
219
+ /// ```
151
220
pub fn catch ( mut self , reject : MetacallFutureHandler ) -> Self {
152
221
self . reject = Some ( reject) ;
153
222
154
223
self
155
224
}
156
225
157
- /// Adds data.
226
+ /// Adds data to use it inside the `resolver` and `reject`.
227
+ ///
228
+ /// Example:
229
+ /// ```rust
230
+ /// use metacall::{MetacallValue, MetacallFuture, metacall};
231
+ ///
232
+ /// fn run() {
233
+ /// let x = 10;
234
+ /// fn resolve(result: impl MetacallValue, data: impl MetacallValue) {
235
+ /// println!("X = {data}");
236
+ /// }
237
+ ///
238
+ /// fn reject(result: impl MetacallValue, data: impl MetacallValue) {
239
+ /// println!("X = {data}");
240
+ /// }
241
+ ///
242
+ /// let future = metacall::<MetacallFuture>("async_function", [1]).unwrap();
243
+ /// future.then(resolve).catch(reject),data(x).await_fut();
244
+ /// }
245
+ /// ```
158
246
pub fn data ( mut self , data : impl MetacallValue ) -> Self {
159
247
unsafe { drop ( Box :: from_raw ( self . data ) ) } ;
160
248
0 commit comments