node_sys/interface/
async_iterator.rs

1use js_sys::Promise;
2use wasm_bindgen::{prelude::*, JsCast};
3
4// FIXME: only keep this here until AsyncIterator is available in releae upstream
5fn looks_like_iterator(it: &JsValue) -> bool {
6    #[wasm_bindgen]
7    extern {
8        type MaybeIterator;
9        #[wasm_bindgen(method, getter)]
10        fn next(this: &MaybeIterator) -> JsValue;
11    }
12    if !it.is_object() {
13        return false;
14    }
15    let it = it.unchecked_ref::<MaybeIterator>();
16    it.next().is_function()
17}
18
19#[wasm_bindgen]
20extern {
21    #[derive(Clone, Debug)]
22    #[wasm_bindgen(is_type_of = looks_like_iterator)]
23    pub type AsyncIterator;
24
25    #[wasm_bindgen(catch, method, structural)]
26    pub fn next(this: &AsyncIterator) -> Result<Promise, JsValue>;
27}