Skip to content

Commit 95ed50e

Browse files
authored
docs(rs-port): improve MetacallFuture docs and clarify some points (#524)
1 parent 63553d3 commit 95ed50e

File tree

1 file changed

+102
-14
lines changed

1 file changed

+102
-14
lines changed

source/ports/rs_port/src/types/metacall_future.rs

Lines changed: 102 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,40 @@ use std::{
1616
pub type MetacallFutureHandler = fn(Box<dyn MetacallValue>, Box<dyn MetacallValue>);
1717

1818
/// 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+
/// }
2035
/// ```
36+
///
37+
/// **Calling Example:**
38+
/// ```rust
2139
/// 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();
2952
/// }
30-
///
31-
/// let future = metacall::<MetacallFuture>("async_function", [1]).unwrap();
32-
/// future.then(resolve).catch(reject).await_fut();
3353
/// ```
3454
#[repr(C)]
3555
pub struct MetacallFuture {
@@ -141,20 +161,88 @@ impl MetacallFuture {
141161
}
142162

143163
/// 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+
/// ```
144190
pub fn then(mut self, resolve: MetacallFutureHandler) -> Self {
145191
self.resolve = Some(resolve);
146-
192+
147193
self
148194
}
149-
195+
150196
/// 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+
/// ```
151220
pub fn catch(mut self, reject: MetacallFutureHandler) -> Self {
152221
self.reject = Some(reject);
153222

154223
self
155224
}
156225

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+
/// ```
158246
pub fn data(mut self, data: impl MetacallValue) -> Self {
159247
unsafe { drop(Box::from_raw(self.data)) };
160248

0 commit comments

Comments
 (0)