wry_bindgen/
js_helpers.rs

1//! Javascript methods defined for use in JsValue methods
2
3use alloc::string::String;
4
5use crate::JsValue;
6use crate::object_store::ObjectHandle;
7use crate::wasm_bindgen;
8
9#[wasm_bindgen(crate = crate, inline_js = include_str!("./js/convert.js"))]
10extern "C" {
11    #[wasm_bindgen(js_name = "is_undefined")]
12    pub(crate) fn js_is_undefined(x: &JsValue) -> bool;
13
14    #[wasm_bindgen(js_name = "is_null")]
15    pub(crate) fn js_is_null(x: &JsValue) -> bool;
16
17    #[wasm_bindgen(js_name = "is_true")]
18    pub(crate) fn js_is_true(x: &JsValue) -> bool;
19
20    #[wasm_bindgen(js_name = "is_false")]
21    pub(crate) fn js_is_false(x: &JsValue) -> bool;
22
23    #[wasm_bindgen(js_name = "get_typeof")]
24    pub(crate) fn js_typeof(x: &JsValue) -> JsValue;
25
26    #[wasm_bindgen(js_name = "is_falsy")]
27    pub(crate) fn js_is_falsy(x: &JsValue) -> bool;
28
29    #[wasm_bindgen(js_name = "is_truthy")]
30    pub(crate) fn js_is_truthy(x: &JsValue) -> bool;
31
32    #[wasm_bindgen(js_name = "is_object")]
33    pub(crate) fn js_is_object(x: &JsValue) -> bool;
34
35    #[wasm_bindgen(js_name = "is_function")]
36    pub(crate) fn js_is_function(x: &JsValue) -> bool;
37
38    #[wasm_bindgen(js_name = "is_string")]
39    pub(crate) fn js_is_string(x: &JsValue) -> bool;
40
41    #[wasm_bindgen(js_name = "is_symbol")]
42    pub(crate) fn js_is_symbol(x: &JsValue) -> bool;
43
44    #[wasm_bindgen(js_name = "is_bigint")]
45    pub(crate) fn js_is_bigint(x: &JsValue) -> bool;
46
47    /// Get the string value of a JsValue if it is a string, otherwise None.
48    #[wasm_bindgen(js_name = "as_string")]
49    pub(crate) fn js_as_string(x: &JsValue) -> Option<String>;
50
51    /// Get the f64 value of a JsValue if it is a number, otherwise None.
52    #[wasm_bindgen(js_name = "as_f64")]
53    pub(crate) fn js_as_f64(x: &JsValue) -> Option<f64>;
54
55    /// Get a debug string representation of the JsValue.
56    #[wasm_bindgen(js_name = "debug_string")]
57    pub(crate) fn js_debug_string(x: &JsValue) -> String;
58
59    // Arithmetic operators
60    #[wasm_bindgen(js_name = "js_checked_div")]
61    pub(crate) fn js_checked_div(a: &JsValue, b: &JsValue) -> JsValue;
62
63    #[wasm_bindgen(js_name = "js_pow")]
64    pub(crate) fn js_pow(a: &JsValue, b: &JsValue) -> JsValue;
65
66    #[wasm_bindgen(js_name = "js_add")]
67    pub(crate) fn js_add(a: &JsValue, b: &JsValue) -> JsValue;
68
69    #[wasm_bindgen(js_name = "js_sub")]
70    pub(crate) fn js_sub(a: &JsValue, b: &JsValue) -> JsValue;
71
72    #[wasm_bindgen(js_name = "js_mul")]
73    pub(crate) fn js_mul(a: &JsValue, b: &JsValue) -> JsValue;
74
75    #[wasm_bindgen(js_name = "js_div")]
76    pub(crate) fn js_div(a: &JsValue, b: &JsValue) -> JsValue;
77
78    #[wasm_bindgen(js_name = "js_rem")]
79    pub(crate) fn js_rem(a: &JsValue, b: &JsValue) -> JsValue;
80
81    #[wasm_bindgen(js_name = "js_neg")]
82    pub(crate) fn js_neg(a: &JsValue) -> JsValue;
83
84    // Bitwise operators
85    #[wasm_bindgen(js_name = "js_bit_and")]
86    pub(crate) fn js_bit_and(a: &JsValue, b: &JsValue) -> JsValue;
87
88    #[wasm_bindgen(js_name = "js_bit_or")]
89    pub(crate) fn js_bit_or(a: &JsValue, b: &JsValue) -> JsValue;
90
91    #[wasm_bindgen(js_name = "js_bit_xor")]
92    pub(crate) fn js_bit_xor(a: &JsValue, b: &JsValue) -> JsValue;
93
94    #[wasm_bindgen(js_name = "js_bit_not")]
95    pub(crate) fn js_bit_not(a: &JsValue) -> JsValue;
96
97    #[wasm_bindgen(js_name = "js_shl")]
98    pub(crate) fn js_shl(a: &JsValue, b: &JsValue) -> JsValue;
99
100    #[wasm_bindgen(js_name = "js_shr")]
101    pub(crate) fn js_shr(a: &JsValue, b: &JsValue) -> JsValue;
102
103    #[wasm_bindgen(js_name = "js_unsigned_shr")]
104    pub(crate) fn js_unsigned_shr(a: &JsValue, b: &JsValue) -> u32;
105
106    // Comparison operators
107    #[wasm_bindgen(js_name = "js_lt")]
108    pub(crate) fn js_lt(a: &JsValue, b: &JsValue) -> bool;
109
110    #[wasm_bindgen(js_name = "js_le")]
111    pub(crate) fn js_le(a: &JsValue, b: &JsValue) -> bool;
112
113    #[wasm_bindgen(js_name = "js_gt")]
114    pub(crate) fn js_gt(a: &JsValue, b: &JsValue) -> bool;
115
116    #[wasm_bindgen(js_name = "js_ge")]
117    pub(crate) fn js_ge(a: &JsValue, b: &JsValue) -> bool;
118
119    #[wasm_bindgen(js_name = "js_loose_eq")]
120    pub(crate) fn js_loose_eq(a: &JsValue, b: &JsValue) -> bool;
121
122    // Other operators
123    #[wasm_bindgen(js_name = "js_in")]
124    pub(crate) fn js_in(prop: &JsValue, obj: &JsValue) -> bool;
125
126    // instanceof check for Error
127    #[wasm_bindgen(js_name = "is_error")]
128    pub(crate) fn js_is_error(x: &JsValue) -> bool;
129
130    // Heap management - clone a value in the JS heap
131    #[wasm_bindgen(js_name = "clone_heap_ref")]
132    pub(crate) fn js_clone_heap_ref(heap_id: u64) -> JsValue;
133
134    // Heap management - drop a value from the JS heap
135    #[wasm_bindgen(js_name = "drop_heap_ref")]
136    pub(crate) fn js_drop_heap_ref(heap_id: u64);
137
138    // Create a wrapper object for an exported Rust struct
139    #[wasm_bindgen(js_name = "create_rust_object_wrapper")]
140    pub(crate) fn create_rust_object_wrapper(handle: u32, class_name: &str) -> JsValue;
141
142    // Extract the Rust object handle from a JavaScript wrapper object
143    // Returns -1 if the object doesn't have a __handle property
144    #[wasm_bindgen(js_name = "extract_rust_handle")]
145    pub fn js_extract_rust_handle(obj: &JsValue) -> Option<ObjectHandle>;
146}