1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
/* This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/// Extension traits that are shared across multiple render targets
use crate::Config;
use extend::ext;
use uniffi_bindgen::interface::{Function, Method, Object};
/// Check if a JS function should be async.
///
/// `uniffi-bindgen-gecko-js` has special async handling. Many non-async Rust functions end up
/// being async in js
fn is_js_async(config: &Config, spec: &str) -> bool {
if config.receiver_thread.main.contains(spec) {
false
} else if config.receiver_thread.worker.contains(spec) {
true
} else {
match &config.receiver_thread.default {
Some(t) => t != "main",
_ => true,
}
}
}
#[ext]
pub impl Function {
fn is_js_async(&self, config: &Config) -> bool {
is_js_async(config, self.name())
}
}
#[ext]
pub impl Object {
fn is_constructor_async(&self, config: &Config) -> bool {
is_js_async(config, self.name())
}
fn is_method_async(&self, method: &Method, config: &Config) -> bool {
is_js_async(config, &format!("{}.{}", self.name(), method.name()))
}
}
|