1use std::any::type_name;
4use std::convert::From;
5use std::convert::TryFrom;
6use std::error::Error;
7use std::fmt;
8use std::fmt::Display;
9use std::fmt::Formatter;
10use std::hash::Hash;
11use std::hash::Hasher;
12use std::mem::transmute;
13use std::ops::Deref;
14
15use crate::Local;
16use crate::support::Opaque;
17
18unsafe extern "C" {
19 fn v8__Data__EQ(this: *const Data, other: *const Data) -> bool;
20 fn v8__Data__IsBigInt(this: *const Data) -> bool;
21 fn v8__Data__IsBoolean(this: *const Data) -> bool;
22 fn v8__Data__IsContext(this: *const Data) -> bool;
23 fn v8__Data__IsFixedArray(this: *const Data) -> bool;
24 fn v8__Data__IsFunctionTemplate(this: *const Data) -> bool;
25 fn v8__Data__IsModule(this: *const Data) -> bool;
26 fn v8__Data__IsModuleRequest(this: *const Data) -> bool;
27 fn v8__Data__IsName(this: *const Data) -> bool;
28 fn v8__Data__IsNumber(this: *const Data) -> bool;
29 fn v8__Data__IsObjectTemplate(this: *const Data) -> bool;
30 fn v8__Data__IsPrimitive(this: *const Data) -> bool;
31 fn v8__Data__IsPrivate(this: *const Data) -> bool;
32 fn v8__Data__IsString(this: *const Data) -> bool;
33 fn v8__Data__IsSymbol(this: *const Data) -> bool;
34 fn v8__Data__IsValue(this: *const Data) -> bool;
35
36 fn v8__Value__SameValue(this: *const Value, other: *const Value) -> bool;
37 fn v8__Value__StrictEquals(this: *const Value, other: *const Value) -> bool;
38}
39
40impl Data {
41 #[inline(always)]
43 pub fn is_big_int(&self) -> bool {
44 unsafe { v8__Data__IsBigInt(self) }
45 }
46
47 #[inline(always)]
49 pub fn is_boolean(&self) -> bool {
50 unsafe { v8__Data__IsBoolean(self) }
51 }
52
53 #[inline(always)]
55 pub fn is_context(&self) -> bool {
56 unsafe { v8__Data__IsContext(self) }
57 }
58
59 #[inline(always)]
61 pub fn is_fixed_array(&self) -> bool {
62 unsafe { v8__Data__IsFixedArray(self) }
63 }
64
65 #[inline(always)]
67 pub fn is_function_template(&self) -> bool {
68 unsafe { v8__Data__IsFunctionTemplate(self) }
69 }
70
71 #[inline(always)]
73 pub fn is_module(&self) -> bool {
74 unsafe { v8__Data__IsModule(self) }
75 }
76
77 #[inline(always)]
79 pub fn is_module_request(&self) -> bool {
80 unsafe { v8__Data__IsModuleRequest(self) }
81 }
82
83 #[inline(always)]
85 pub fn is_name(&self) -> bool {
86 unsafe { v8__Data__IsName(self) }
87 }
88
89 #[inline(always)]
91 pub fn is_number(&self) -> bool {
92 unsafe { v8__Data__IsNumber(self) }
93 }
94
95 #[inline(always)]
97 pub fn is_object_template(&self) -> bool {
98 unsafe { v8__Data__IsObjectTemplate(self) }
99 }
100
101 #[inline(always)]
103 pub fn is_primitive(&self) -> bool {
104 unsafe { v8__Data__IsPrimitive(self) }
105 }
106
107 #[inline(always)]
109 pub fn is_private(&self) -> bool {
110 unsafe { v8__Data__IsPrivate(self) }
111 }
112
113 #[inline(always)]
115 pub fn is_string(&self) -> bool {
116 unsafe { v8__Data__IsString(self) }
117 }
118
119 #[inline(always)]
121 pub fn is_symbol(&self) -> bool {
122 unsafe { v8__Data__IsSymbol(self) }
123 }
124
125 #[inline(always)]
127 pub fn is_value(&self) -> bool {
128 unsafe { v8__Data__IsValue(self) }
129 }
130}
131
132macro_rules! impl_deref {
133 { $target:ident for $type:ident } => {
134 impl Deref for $type {
135 type Target = $target;
136 #[inline]
137 fn deref(&self) -> &Self::Target {
138 unsafe { &*(self as *const _ as *const Self::Target) }
139 }
140 }
141 };
142}
143
144macro_rules! impl_from {
145 { $source:ident for $type:ident } => {
146 impl<'s> From<Local<'s, $source>> for Local<'s, $type> {
147 #[inline]
148 fn from(l: Local<'s, $source>) -> Self {
149 unsafe { transmute(l) }
150 }
151 }
152 };
153}
154
155macro_rules! impl_try_from {
156 { $source:ident for $target:ident if $value:pat => $check:expr } => {
157 impl<'s> TryFrom<Local<'s, $source>> for Local<'s, $target> {
158 type Error = DataError;
159 #[inline]
160 fn try_from(l: Local<'s, $source>) -> Result<Self, Self::Error> {
161 #[allow(dead_code)]
163 #[inline(always)]
164 fn cast<T>(l: Local<$source>) -> Local<T> {
165 unsafe { transmute::<Local<$source>, Local<T>>(l) }
166 }
167 match l {
168 $value if $check => Ok(unsafe {
169 transmute::<Local<'s, $source>, Local<'s, $target>>(l)
170 }),
171 _ => Err(DataError::bad_type::<$target, $source>())
172 }
173 }
174 }
175 };
176}
177
178macro_rules! impl_eq {
179 { for $type:ident } => {
180 impl Eq for $type {}
181 };
182}
183
184macro_rules! impl_hash {
185 { for $type:ident use $method:ident } => {
186 impl Hash for $type {
187 fn hash<H: Hasher>(&self, state: &mut H) {
188 self.$method().hash(state)
189 }
190 }
191 };
192}
193
194macro_rules! impl_partial_eq {
195 { $rhs:ident for $type:ident use identity } => {
196 impl<'s> PartialEq<$rhs> for $type {
197 #[inline]
198 fn eq(&self, other: &$rhs) -> bool {
199 let a = self as *const _ as *const Data;
200 let b = other as *const _ as *const Data;
201 unsafe { v8__Data__EQ(a, b) }
202 }
203 }
204 };
205 { $rhs:ident for $type:ident use strict_equals } => {
206 impl<'s> PartialEq<$rhs> for $type {
207 #[inline]
208 fn eq(&self, other: &$rhs) -> bool {
209 let a = self as *const _ as *const Value;
210 let b = other as *const _ as *const Value;
211 unsafe { v8__Value__StrictEquals(a, b) }
212 }
213 }
214 };
215
216 { $rhs:ident for $type:ident use same_value_zero } => {
217 impl<'s> PartialEq<$rhs> for $type {
218 #[inline]
219 fn eq(&self, other: &$rhs) -> bool {
220 let a = self as *const _ as *const Value;
221 let b = other as *const _ as *const Value;
222 unsafe {
223 v8__Value__SameValue(a, b) || {
224 let zero = &*Local::<Value>::from(Integer::zero());
225 v8__Value__StrictEquals(a, zero) && v8__Value__StrictEquals(b, zero)
226 }
227 }
228 }
229 }
230 };
231}
232
233#[derive(Clone, Copy, Debug)]
234pub enum DataError {
235 BadType {
236 actual: &'static str,
237 expected: &'static str,
238 },
239 NoData {
240 expected: &'static str,
241 },
242}
243
244impl DataError {
245 pub(crate) fn bad_type<E: 'static, A: 'static>() -> Self {
246 Self::BadType {
247 expected: type_name::<E>(),
248 actual: type_name::<A>(),
249 }
250 }
251
252 pub(crate) fn no_data<E: 'static>() -> Self {
253 Self::NoData {
254 expected: type_name::<E>(),
255 }
256 }
257}
258
259impl Display for DataError {
260 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
261 match self {
262 Self::BadType { expected, actual } => {
263 write!(f, "expected type `{expected}`, got `{actual}`")
264 }
265 Self::NoData { expected } => {
266 write!(f, "expected `Some({expected})`, found `None`")
267 }
268 }
269 }
270}
271
272impl Error for DataError {}
273
274#[repr(C)]
276#[derive(Debug)]
277pub struct Data(Opaque);
278
279impl_from! { AccessorSignature for Data }
280impl_from! { Context for Data }
281impl_from! { FixedArray for Data }
282impl_from! { Module for Data }
283impl_from! { ModuleRequest for Data }
284impl_from! { PrimitiveArray for Data }
285impl_from! { Private for Data }
286impl_from! { Signature for Data }
287impl_from! { Template for Data }
288impl_from! { FunctionTemplate for Data }
289impl_from! { ObjectTemplate for Data }
290impl_from! { UnboundModuleScript for Data }
291impl_from! { Value for Data }
292impl_from! { External for Data }
293impl_from! { Object for Data }
294impl_from! { Array for Data }
295impl_from! { ArrayBuffer for Data }
296impl_from! { ArrayBufferView for Data }
297impl_from! { DataView for Data }
298impl_from! { TypedArray for Data }
299impl_from! { BigInt64Array for Data }
300impl_from! { BigUint64Array for Data }
301impl_from! { Float32Array for Data }
302impl_from! { Float64Array for Data }
303impl_from! { Int16Array for Data }
304impl_from! { Int32Array for Data }
305impl_from! { Int8Array for Data }
306impl_from! { Uint16Array for Data }
307impl_from! { Uint32Array for Data }
308impl_from! { Uint8Array for Data }
309impl_from! { Uint8ClampedArray for Data }
310impl_from! { BigIntObject for Data }
311impl_from! { BooleanObject for Data }
312impl_from! { Date for Data }
313impl_from! { Function for Data }
314impl_from! { Map for Data }
315impl_from! { NumberObject for Data }
316impl_from! { Promise for Data }
317impl_from! { PromiseResolver for Data }
318impl_from! { Proxy for Data }
319impl_from! { RegExp for Data }
320impl_from! { Set for Data }
321impl_from! { SharedArrayBuffer for Data }
322impl_from! { StringObject for Data }
323impl_from! { SymbolObject for Data }
324impl_from! { WasmMemoryObject for Data }
325impl_from! { WasmModuleObject for Data }
326impl_from! { Primitive for Data }
327impl_from! { BigInt for Data }
328impl_from! { Boolean for Data }
329impl_from! { Name for Data }
330impl_from! { String for Data }
331impl_from! { Symbol for Data }
332impl_from! { Number for Data }
333impl_from! { Integer for Data }
334impl_from! { Int32 for Data }
335impl_from! { Uint32 for Data }
336impl_partial_eq! { AccessorSignature for Data use identity }
337impl_partial_eq! { Context for Data use identity }
338impl_partial_eq! { FixedArray for Data use identity }
339impl_partial_eq! { Module for Data use identity }
340impl_partial_eq! { ModuleRequest for Data use identity }
341impl_partial_eq! { PrimitiveArray for Data use identity }
342impl_partial_eq! { Private for Data use identity }
343impl_partial_eq! { Signature for Data use identity }
344impl_partial_eq! { Template for Data use identity }
345impl_partial_eq! { FunctionTemplate for Data use identity }
346impl_partial_eq! { ObjectTemplate for Data use identity }
347impl_partial_eq! { UnboundModuleScript for Data use identity }
348impl_partial_eq! { External for Data use identity }
349impl_partial_eq! { Object for Data use identity }
350impl_partial_eq! { Array for Data use identity }
351impl_partial_eq! { ArrayBuffer for Data use identity }
352impl_partial_eq! { ArrayBufferView for Data use identity }
353impl_partial_eq! { DataView for Data use identity }
354impl_partial_eq! { TypedArray for Data use identity }
355impl_partial_eq! { BigInt64Array for Data use identity }
356impl_partial_eq! { BigUint64Array for Data use identity }
357impl_partial_eq! { Float32Array for Data use identity }
358impl_partial_eq! { Float64Array for Data use identity }
359impl_partial_eq! { Int16Array for Data use identity }
360impl_partial_eq! { Int32Array for Data use identity }
361impl_partial_eq! { Int8Array for Data use identity }
362impl_partial_eq! { Uint16Array for Data use identity }
363impl_partial_eq! { Uint32Array for Data use identity }
364impl_partial_eq! { Uint8Array for Data use identity }
365impl_partial_eq! { Uint8ClampedArray for Data use identity }
366impl_partial_eq! { BigIntObject for Data use identity }
367impl_partial_eq! { BooleanObject for Data use identity }
368impl_partial_eq! { Date for Data use identity }
369impl_partial_eq! { Function for Data use identity }
370impl_partial_eq! { Map for Data use identity }
371impl_partial_eq! { NumberObject for Data use identity }
372impl_partial_eq! { Promise for Data use identity }
373impl_partial_eq! { PromiseResolver for Data use identity }
374impl_partial_eq! { Proxy for Data use identity }
375impl_partial_eq! { RegExp for Data use identity }
376impl_partial_eq! { Set for Data use identity }
377impl_partial_eq! { SharedArrayBuffer for Data use identity }
378impl_partial_eq! { StringObject for Data use identity }
379impl_partial_eq! { SymbolObject for Data use identity }
380impl_partial_eq! { WasmMemoryObject for Data use identity }
381impl_partial_eq! { WasmModuleObject for Data use identity }
382impl_partial_eq! { Boolean for Data use identity }
383impl_partial_eq! { Symbol for Data use identity }
384
385#[repr(C)]
388#[derive(Debug)]
389pub struct AccessorSignature(Opaque);
390
391impl_deref! { Data for AccessorSignature }
392impl_eq! { for AccessorSignature }
393impl_partial_eq! { Data for AccessorSignature use identity }
394impl_partial_eq! { AccessorSignature for AccessorSignature use identity }
395
396#[repr(C)]
399#[derive(Debug)]
400pub struct Context(Opaque);
401
402impl_deref! { Data for Context }
403impl_try_from! { Data for Context if v => v.is_context() }
404impl_eq! { for Context }
405impl_partial_eq! { Data for Context use identity }
406impl_partial_eq! { Context for Context use identity }
407
408#[repr(C)]
410#[derive(Debug)]
411pub struct FixedArray(Opaque);
412
413impl_deref! { Data for FixedArray }
414impl_try_from! { Data for FixedArray if v => v.is_fixed_array() }
415impl_eq! { for FixedArray }
416impl_partial_eq! { Data for FixedArray use identity }
417impl_partial_eq! { FixedArray for FixedArray use identity }
418
419#[repr(C)]
421#[derive(Debug)]
422pub struct Message(Opaque);
423
424impl_eq! { for Message }
425impl_partial_eq! { Message for Message use identity }
426
427#[repr(C)]
429#[derive(Debug)]
430pub struct Module(Opaque);
431
432impl_deref! { Data for Module }
433impl_try_from! { Data for Module if v => v.is_module() }
434impl_eq! { for Module }
435impl_hash! { for Module use get_identity_hash }
436impl_partial_eq! { Data for Module use identity }
437impl_partial_eq! { Module for Module use identity }
438
439#[repr(C)]
440#[derive(Debug)]
441pub struct ModuleRequest(Opaque);
442
443impl_deref! { Data for ModuleRequest }
444impl_try_from! { Data for ModuleRequest if v => v.is_module_request() }
445impl_eq! { for ModuleRequest }
446impl_partial_eq! { Data for ModuleRequest use identity }
447impl_partial_eq! { ModuleRequest for ModuleRequest use identity }
448
449#[repr(C)]
455#[derive(Debug)]
456pub struct PrimitiveArray(Opaque);
457
458impl_deref! { Data for PrimitiveArray }
459impl_eq! { for PrimitiveArray }
460impl_partial_eq! { Data for PrimitiveArray use identity }
461impl_partial_eq! { PrimitiveArray for PrimitiveArray use identity }
462
463#[repr(C)]
467#[derive(Debug)]
468pub struct Private(Opaque);
469
470impl_deref! { Data for Private }
471impl_try_from! { Data for Private if v => v.is_private() }
472impl_eq! { for Private }
473impl_partial_eq! { Data for Private use identity }
474impl_partial_eq! { Private for Private use identity }
475
476#[repr(C)]
479#[derive(Debug)]
480pub struct Script(Opaque);
481
482impl_eq! { for Script }
483impl_partial_eq! { Script for Script use identity }
484
485#[repr(C)]
490#[derive(Debug)]
491pub struct ScriptOrModule(Opaque);
492
493impl_eq! { for ScriptOrModule }
494impl_partial_eq! { ScriptOrModule for ScriptOrModule use identity }
495
496#[repr(C)]
503#[derive(Debug)]
504pub struct Signature(Opaque);
505
506impl_deref! { Data for Signature }
507impl_eq! { for Signature }
508impl_partial_eq! { Data for Signature use identity }
509impl_partial_eq! { Signature for Signature use identity }
510
511#[repr(C)]
513#[derive(Debug)]
514pub struct StackFrame(Opaque);
515
516impl_eq! { for StackFrame }
517impl_partial_eq! { StackFrame for StackFrame use identity }
518
519#[repr(C)]
523#[derive(Debug)]
524pub struct StackTrace(Opaque);
525
526impl_eq! { for StackTrace }
527impl_partial_eq! { StackTrace for StackTrace use identity }
528
529#[repr(C)]
531#[derive(Debug)]
532pub struct Template(Opaque);
533
534impl_deref! { Data for Template }
535impl_try_from! { Data for Template if v => v.is_function_template() || v.is_object_template() }
536impl_from! { FunctionTemplate for Template }
537impl_from! { ObjectTemplate for Template }
538impl_eq! { for Template }
539impl_partial_eq! { Data for Template use identity }
540impl_partial_eq! { Template for Template use identity }
541impl_partial_eq! { FunctionTemplate for Template use identity }
542impl_partial_eq! { ObjectTemplate for Template use identity }
543
544#[repr(C)]
650#[derive(Debug)]
651pub struct FunctionTemplate(Opaque);
652
653impl_deref! { Template for FunctionTemplate }
654impl_try_from! { Data for FunctionTemplate if v => v.is_function_template() }
655impl_try_from! { Template for FunctionTemplate if v => v.is_function_template() }
656impl_eq! { for FunctionTemplate }
657impl_partial_eq! { Data for FunctionTemplate use identity }
658impl_partial_eq! { Template for FunctionTemplate use identity }
659impl_partial_eq! { FunctionTemplate for FunctionTemplate use identity }
660
661#[repr(C)]
666#[derive(Debug)]
667pub struct ObjectTemplate(Opaque);
668
669impl_deref! { Template for ObjectTemplate }
670impl_try_from! { Data for ObjectTemplate if v => v.is_object_template() }
671impl_try_from! { Template for ObjectTemplate if v => v.is_object_template() }
672impl_eq! { for ObjectTemplate }
673impl_partial_eq! { Data for ObjectTemplate use identity }
674impl_partial_eq! { Template for ObjectTemplate use identity }
675impl_partial_eq! { ObjectTemplate for ObjectTemplate use identity }
676
677#[repr(C)]
679#[derive(Debug)]
680pub struct UnboundModuleScript(Opaque);
681
682impl_deref! { Data for UnboundModuleScript }
683impl_eq! { for UnboundModuleScript }
684impl_partial_eq! { Data for UnboundModuleScript use identity }
685impl_partial_eq! { UnboundModuleScript for UnboundModuleScript use identity }
686
687#[repr(C)]
689#[derive(Debug)]
690pub struct UnboundScript(Opaque);
691
692impl_eq! { for UnboundScript }
693impl_partial_eq! { UnboundScript for UnboundScript use identity }
694
695#[repr(C)]
697#[derive(Debug, Clone, Copy)]
698pub struct Value(Opaque);
699
700impl_deref! { Data for Value }
701impl_try_from! { Data for Value if v => v.is_value() }
702impl_from! { External for Value }
703impl_from! { Object for Value }
704impl_from! { Array for Value }
705impl_from! { ArrayBuffer for Value }
706impl_from! { ArrayBufferView for Value }
707impl_from! { DataView for Value }
708impl_from! { TypedArray for Value }
709impl_from! { BigInt64Array for Value }
710impl_from! { BigUint64Array for Value }
711impl_from! { Float32Array for Value }
712impl_from! { Float64Array for Value }
713impl_from! { Int16Array for Value }
714impl_from! { Int32Array for Value }
715impl_from! { Int8Array for Value }
716impl_from! { Uint16Array for Value }
717impl_from! { Uint32Array for Value }
718impl_from! { Uint8Array for Value }
719impl_from! { Uint8ClampedArray for Value }
720impl_from! { BigIntObject for Value }
721impl_from! { BooleanObject for Value }
722impl_from! { Date for Value }
723impl_from! { Function for Value }
724impl_from! { Map for Value }
725impl_from! { NumberObject for Value }
726impl_from! { Promise for Value }
727impl_from! { PromiseResolver for Value }
728impl_from! { Proxy for Value }
729impl_from! { RegExp for Value }
730impl_from! { Set for Value }
731impl_from! { SharedArrayBuffer for Value }
732impl_from! { StringObject for Value }
733impl_from! { SymbolObject for Value }
734impl_from! { WasmMemoryObject for Value }
735impl_from! { WasmModuleObject for Value }
736impl_from! { Primitive for Value }
737impl_from! { BigInt for Value }
738impl_from! { Boolean for Value }
739impl_from! { Name for Value }
740impl_from! { String for Value }
741impl_from! { Symbol for Value }
742impl_from! { Number for Value }
743impl_from! { Integer for Value }
744impl_from! { Int32 for Value }
745impl_from! { Uint32 for Value }
746impl_eq! { for Value }
747impl_hash! { for Value use get_hash }
748impl_partial_eq! { Value for Value use same_value_zero }
749impl_partial_eq! { External for Value use identity }
750impl_partial_eq! { Object for Value use identity }
751impl_partial_eq! { Array for Value use identity }
752impl_partial_eq! { ArrayBuffer for Value use identity }
753impl_partial_eq! { ArrayBufferView for Value use identity }
754impl_partial_eq! { DataView for Value use identity }
755impl_partial_eq! { TypedArray for Value use identity }
756impl_partial_eq! { BigInt64Array for Value use identity }
757impl_partial_eq! { BigUint64Array for Value use identity }
758impl_partial_eq! { Float32Array for Value use identity }
759impl_partial_eq! { Float64Array for Value use identity }
760impl_partial_eq! { Int16Array for Value use identity }
761impl_partial_eq! { Int32Array for Value use identity }
762impl_partial_eq! { Int8Array for Value use identity }
763impl_partial_eq! { Uint16Array for Value use identity }
764impl_partial_eq! { Uint32Array for Value use identity }
765impl_partial_eq! { Uint8Array for Value use identity }
766impl_partial_eq! { Uint8ClampedArray for Value use identity }
767impl_partial_eq! { BigIntObject for Value use identity }
768impl_partial_eq! { BooleanObject for Value use identity }
769impl_partial_eq! { Date for Value use identity }
770impl_partial_eq! { Function for Value use identity }
771impl_partial_eq! { Map for Value use identity }
772impl_partial_eq! { NumberObject for Value use identity }
773impl_partial_eq! { Promise for Value use identity }
774impl_partial_eq! { PromiseResolver for Value use identity }
775impl_partial_eq! { Proxy for Value use identity }
776impl_partial_eq! { RegExp for Value use identity }
777impl_partial_eq! { Set for Value use identity }
778impl_partial_eq! { SharedArrayBuffer for Value use identity }
779impl_partial_eq! { StringObject for Value use identity }
780impl_partial_eq! { SymbolObject for Value use identity }
781impl_partial_eq! { WasmMemoryObject for Value use identity }
782impl_partial_eq! { WasmModuleObject for Value use identity }
783impl_partial_eq! { Primitive for Value use same_value_zero }
784impl_partial_eq! { BigInt for Value use same_value_zero }
785impl_partial_eq! { Boolean for Value use identity }
786impl_partial_eq! { Name for Value use same_value_zero }
787impl_partial_eq! { String for Value use same_value_zero }
788impl_partial_eq! { Symbol for Value use identity }
789impl_partial_eq! { Number for Value use same_value_zero }
790impl_partial_eq! { Integer for Value use same_value_zero }
791impl_partial_eq! { Int32 for Value use same_value_zero }
792impl_partial_eq! { Uint32 for Value use same_value_zero }
793
794#[repr(C)]
797#[derive(Debug)]
798pub struct External(Opaque);
799
800impl_deref! { Value for External }
801impl_try_from! { Data for External if v => v.is_value() && cast::<Value>(v).is_external() }
802impl_try_from! { Value for External if v => v.is_external() }
803impl_eq! { for External }
804impl_hash! { for External use get_hash }
805impl_partial_eq! { Data for External use identity }
806impl_partial_eq! { Value for External use identity }
807impl_partial_eq! { External for External use identity }
808
809#[repr(C)]
811#[derive(Debug)]
812pub struct Object(Opaque);
813
814impl_deref! { Value for Object }
815impl_try_from! { Data for Object if v => v.is_value() && cast::<Value>(v).is_object() }
816impl_try_from! { Value for Object if v => v.is_object() }
817impl_from! { Array for Object }
818impl_from! { ArrayBuffer for Object }
819impl_from! { ArrayBufferView for Object }
820impl_from! { DataView for Object }
821impl_from! { TypedArray for Object }
822impl_from! { BigInt64Array for Object }
823impl_from! { BigUint64Array for Object }
824impl_from! { Float32Array for Object }
825impl_from! { Float64Array for Object }
826impl_from! { Int16Array for Object }
827impl_from! { Int32Array for Object }
828impl_from! { Int8Array for Object }
829impl_from! { Uint16Array for Object }
830impl_from! { Uint32Array for Object }
831impl_from! { Uint8Array for Object }
832impl_from! { Uint8ClampedArray for Object }
833impl_from! { BigIntObject for Object }
834impl_from! { BooleanObject for Object }
835impl_from! { Date for Object }
836impl_from! { Function for Object }
837impl_from! { Map for Object }
838impl_from! { NumberObject for Object }
839impl_from! { Promise for Object }
840impl_from! { PromiseResolver for Object }
841impl_from! { Proxy for Object }
842impl_from! { RegExp for Object }
843impl_from! { Set for Object }
844impl_from! { SharedArrayBuffer for Object }
845impl_from! { StringObject for Object }
846impl_from! { SymbolObject for Object }
847impl_from! { WasmMemoryObject for Object }
848impl_from! { WasmModuleObject for Object }
849impl_eq! { for Object }
850impl_hash! { for Object use get_identity_hash }
851impl_partial_eq! { Data for Object use identity }
852impl_partial_eq! { Value for Object use identity }
853impl_partial_eq! { Object for Object use identity }
854impl_partial_eq! { Array for Object use identity }
855impl_partial_eq! { ArrayBuffer for Object use identity }
856impl_partial_eq! { ArrayBufferView for Object use identity }
857impl_partial_eq! { DataView for Object use identity }
858impl_partial_eq! { TypedArray for Object use identity }
859impl_partial_eq! { BigInt64Array for Object use identity }
860impl_partial_eq! { BigUint64Array for Object use identity }
861impl_partial_eq! { Float32Array for Object use identity }
862impl_partial_eq! { Float64Array for Object use identity }
863impl_partial_eq! { Int16Array for Object use identity }
864impl_partial_eq! { Int32Array for Object use identity }
865impl_partial_eq! { Int8Array for Object use identity }
866impl_partial_eq! { Uint16Array for Object use identity }
867impl_partial_eq! { Uint32Array for Object use identity }
868impl_partial_eq! { Uint8Array for Object use identity }
869impl_partial_eq! { Uint8ClampedArray for Object use identity }
870impl_partial_eq! { BigIntObject for Object use identity }
871impl_partial_eq! { BooleanObject for Object use identity }
872impl_partial_eq! { Date for Object use identity }
873impl_partial_eq! { Function for Object use identity }
874impl_partial_eq! { Map for Object use identity }
875impl_partial_eq! { NumberObject for Object use identity }
876impl_partial_eq! { Promise for Object use identity }
877impl_partial_eq! { PromiseResolver for Object use identity }
878impl_partial_eq! { Proxy for Object use identity }
879impl_partial_eq! { RegExp for Object use identity }
880impl_partial_eq! { Set for Object use identity }
881impl_partial_eq! { SharedArrayBuffer for Object use identity }
882impl_partial_eq! { StringObject for Object use identity }
883impl_partial_eq! { SymbolObject for Object use identity }
884impl_partial_eq! { WasmMemoryObject for Object use identity }
885impl_partial_eq! { WasmModuleObject for Object use identity }
886
887#[repr(C)]
889#[derive(Debug)]
890pub struct Array(Opaque);
891
892impl_deref! { Object for Array }
893impl_try_from! { Data for Array if v => v.is_value() && cast::<Value>(v).is_array() }
894impl_try_from! { Value for Array if v => v.is_array() }
895impl_try_from! { Object for Array if v => v.is_array() }
896impl_eq! { for Array }
897impl_hash! { for Array use get_identity_hash }
898impl_partial_eq! { Data for Array use identity }
899impl_partial_eq! { Value for Array use identity }
900impl_partial_eq! { Object for Array use identity }
901impl_partial_eq! { Array for Array use identity }
902
903#[repr(C)]
905#[derive(Debug)]
906pub struct ArrayBuffer(Opaque);
907
908impl_deref! { Object for ArrayBuffer }
909impl_try_from! { Data for ArrayBuffer if v => v.is_value() && cast::<Value>(v).is_array_buffer() }
910impl_try_from! { Value for ArrayBuffer if v => v.is_array_buffer() }
911impl_try_from! { Object for ArrayBuffer if v => v.is_array_buffer() }
912impl_eq! { for ArrayBuffer }
913impl_hash! { for ArrayBuffer use get_identity_hash }
914impl_partial_eq! { Data for ArrayBuffer use identity }
915impl_partial_eq! { Value for ArrayBuffer use identity }
916impl_partial_eq! { Object for ArrayBuffer use identity }
917impl_partial_eq! { ArrayBuffer for ArrayBuffer use identity }
918
919#[repr(C)]
922#[derive(Debug)]
923pub struct ArrayBufferView(Opaque);
924
925impl_deref! { Object for ArrayBufferView }
926impl_try_from! { Data for ArrayBufferView if v => v.is_value() && cast::<Value>(v).is_array_buffer_view() }
927impl_try_from! { Value for ArrayBufferView if v => v.is_array_buffer_view() }
928impl_try_from! { Object for ArrayBufferView if v => v.is_array_buffer_view() }
929impl_from! { DataView for ArrayBufferView }
930impl_from! { TypedArray for ArrayBufferView }
931impl_from! { BigInt64Array for ArrayBufferView }
932impl_from! { BigUint64Array for ArrayBufferView }
933impl_from! { Float32Array for ArrayBufferView }
934impl_from! { Float64Array for ArrayBufferView }
935impl_from! { Int16Array for ArrayBufferView }
936impl_from! { Int32Array for ArrayBufferView }
937impl_from! { Int8Array for ArrayBufferView }
938impl_from! { Uint16Array for ArrayBufferView }
939impl_from! { Uint32Array for ArrayBufferView }
940impl_from! { Uint8Array for ArrayBufferView }
941impl_from! { Uint8ClampedArray for ArrayBufferView }
942impl_eq! { for ArrayBufferView }
943impl_hash! { for ArrayBufferView use get_identity_hash }
944impl_partial_eq! { Data for ArrayBufferView use identity }
945impl_partial_eq! { Value for ArrayBufferView use identity }
946impl_partial_eq! { Object for ArrayBufferView use identity }
947impl_partial_eq! { ArrayBufferView for ArrayBufferView use identity }
948impl_partial_eq! { DataView for ArrayBufferView use identity }
949impl_partial_eq! { TypedArray for ArrayBufferView use identity }
950impl_partial_eq! { BigInt64Array for ArrayBufferView use identity }
951impl_partial_eq! { BigUint64Array for ArrayBufferView use identity }
952impl_partial_eq! { Float32Array for ArrayBufferView use identity }
953impl_partial_eq! { Float64Array for ArrayBufferView use identity }
954impl_partial_eq! { Int16Array for ArrayBufferView use identity }
955impl_partial_eq! { Int32Array for ArrayBufferView use identity }
956impl_partial_eq! { Int8Array for ArrayBufferView use identity }
957impl_partial_eq! { Uint16Array for ArrayBufferView use identity }
958impl_partial_eq! { Uint32Array for ArrayBufferView use identity }
959impl_partial_eq! { Uint8Array for ArrayBufferView use identity }
960impl_partial_eq! { Uint8ClampedArray for ArrayBufferView use identity }
961
962#[repr(C)]
964#[derive(Debug)]
965pub struct DataView(Opaque);
966
967impl_deref! { ArrayBufferView for DataView }
968impl_try_from! { Data for DataView if v => v.is_value() && cast::<Value>(v).is_data_view() }
969impl_try_from! { Value for DataView if v => v.is_data_view() }
970impl_try_from! { Object for DataView if v => v.is_data_view() }
971impl_try_from! { ArrayBufferView for DataView if v => v.is_data_view() }
972impl_eq! { for DataView }
973impl_hash! { for DataView use get_identity_hash }
974impl_partial_eq! { Data for DataView use identity }
975impl_partial_eq! { Value for DataView use identity }
976impl_partial_eq! { Object for DataView use identity }
977impl_partial_eq! { ArrayBufferView for DataView use identity }
978impl_partial_eq! { DataView for DataView use identity }
979
980#[repr(C)]
983#[derive(Debug)]
984pub struct TypedArray(Opaque);
985
986impl_deref! { ArrayBufferView for TypedArray }
987impl_try_from! { Data for TypedArray if v => v.is_value() && cast::<Value>(v).is_typed_array() }
988impl_try_from! { Value for TypedArray if v => v.is_typed_array() }
989impl_try_from! { Object for TypedArray if v => v.is_typed_array() }
990impl_try_from! { ArrayBufferView for TypedArray if v => v.is_typed_array() }
991impl_from! { BigInt64Array for TypedArray }
992impl_from! { BigUint64Array for TypedArray }
993impl_from! { Float32Array for TypedArray }
994impl_from! { Float64Array for TypedArray }
995impl_from! { Int16Array for TypedArray }
996impl_from! { Int32Array for TypedArray }
997impl_from! { Int8Array for TypedArray }
998impl_from! { Uint16Array for TypedArray }
999impl_from! { Uint32Array for TypedArray }
1000impl_from! { Uint8Array for TypedArray }
1001impl_from! { Uint8ClampedArray for TypedArray }
1002impl_eq! { for TypedArray }
1003impl_hash! { for TypedArray use get_identity_hash }
1004impl_partial_eq! { Data for TypedArray use identity }
1005impl_partial_eq! { Value for TypedArray use identity }
1006impl_partial_eq! { Object for TypedArray use identity }
1007impl_partial_eq! { ArrayBufferView for TypedArray use identity }
1008impl_partial_eq! { TypedArray for TypedArray use identity }
1009impl_partial_eq! { BigInt64Array for TypedArray use identity }
1010impl_partial_eq! { BigUint64Array for TypedArray use identity }
1011impl_partial_eq! { Float32Array for TypedArray use identity }
1012impl_partial_eq! { Float64Array for TypedArray use identity }
1013impl_partial_eq! { Int16Array for TypedArray use identity }
1014impl_partial_eq! { Int32Array for TypedArray use identity }
1015impl_partial_eq! { Int8Array for TypedArray use identity }
1016impl_partial_eq! { Uint16Array for TypedArray use identity }
1017impl_partial_eq! { Uint32Array for TypedArray use identity }
1018impl_partial_eq! { Uint8Array for TypedArray use identity }
1019impl_partial_eq! { Uint8ClampedArray for TypedArray use identity }
1020
1021#[repr(C)]
1023#[derive(Debug)]
1024pub struct BigInt64Array(Opaque);
1025
1026impl_deref! { TypedArray for BigInt64Array }
1027impl_try_from! { Data for BigInt64Array if v => v.is_value() && cast::<Value>(v).is_big_int64_array() }
1028impl_try_from! { Value for BigInt64Array if v => v.is_big_int64_array() }
1029impl_try_from! { Object for BigInt64Array if v => v.is_big_int64_array() }
1030impl_try_from! { ArrayBufferView for BigInt64Array if v => v.is_big_int64_array() }
1031impl_try_from! { TypedArray for BigInt64Array if v => v.is_big_int64_array() }
1032impl_eq! { for BigInt64Array }
1033impl_hash! { for BigInt64Array use get_identity_hash }
1034impl_partial_eq! { Data for BigInt64Array use identity }
1035impl_partial_eq! { Value for BigInt64Array use identity }
1036impl_partial_eq! { Object for BigInt64Array use identity }
1037impl_partial_eq! { ArrayBufferView for BigInt64Array use identity }
1038impl_partial_eq! { TypedArray for BigInt64Array use identity }
1039impl_partial_eq! { BigInt64Array for BigInt64Array use identity }
1040
1041#[repr(C)]
1043#[derive(Debug)]
1044pub struct BigUint64Array(Opaque);
1045
1046impl_deref! { TypedArray for BigUint64Array }
1047impl_try_from! { Data for BigUint64Array if v => v.is_value() && cast::<Value>(v).is_big_uint64_array() }
1048impl_try_from! { Value for BigUint64Array if v => v.is_big_uint64_array() }
1049impl_try_from! { Object for BigUint64Array if v => v.is_big_uint64_array() }
1050impl_try_from! { ArrayBufferView for BigUint64Array if v => v.is_big_uint64_array() }
1051impl_try_from! { TypedArray for BigUint64Array if v => v.is_big_uint64_array() }
1052impl_eq! { for BigUint64Array }
1053impl_hash! { for BigUint64Array use get_identity_hash }
1054impl_partial_eq! { Data for BigUint64Array use identity }
1055impl_partial_eq! { Value for BigUint64Array use identity }
1056impl_partial_eq! { Object for BigUint64Array use identity }
1057impl_partial_eq! { ArrayBufferView for BigUint64Array use identity }
1058impl_partial_eq! { TypedArray for BigUint64Array use identity }
1059impl_partial_eq! { BigUint64Array for BigUint64Array use identity }
1060
1061#[repr(C)]
1063#[derive(Debug)]
1064pub struct Float32Array(Opaque);
1065
1066impl_deref! { TypedArray for Float32Array }
1067impl_try_from! { Data for Float32Array if v => v.is_value() && cast::<Value>(v).is_float32_array() }
1068impl_try_from! { Value for Float32Array if v => v.is_float32_array() }
1069impl_try_from! { Object for Float32Array if v => v.is_float32_array() }
1070impl_try_from! { ArrayBufferView for Float32Array if v => v.is_float32_array() }
1071impl_try_from! { TypedArray for Float32Array if v => v.is_float32_array() }
1072impl_eq! { for Float32Array }
1073impl_hash! { for Float32Array use get_identity_hash }
1074impl_partial_eq! { Data for Float32Array use identity }
1075impl_partial_eq! { Value for Float32Array use identity }
1076impl_partial_eq! { Object for Float32Array use identity }
1077impl_partial_eq! { ArrayBufferView for Float32Array use identity }
1078impl_partial_eq! { TypedArray for Float32Array use identity }
1079impl_partial_eq! { Float32Array for Float32Array use identity }
1080
1081#[repr(C)]
1083#[derive(Debug)]
1084pub struct Float64Array(Opaque);
1085
1086impl_deref! { TypedArray for Float64Array }
1087impl_try_from! { Data for Float64Array if v => v.is_value() && cast::<Value>(v).is_float64_array() }
1088impl_try_from! { Value for Float64Array if v => v.is_float64_array() }
1089impl_try_from! { Object for Float64Array if v => v.is_float64_array() }
1090impl_try_from! { ArrayBufferView for Float64Array if v => v.is_float64_array() }
1091impl_try_from! { TypedArray for Float64Array if v => v.is_float64_array() }
1092impl_eq! { for Float64Array }
1093impl_hash! { for Float64Array use get_identity_hash }
1094impl_partial_eq! { Data for Float64Array use identity }
1095impl_partial_eq! { Value for Float64Array use identity }
1096impl_partial_eq! { Object for Float64Array use identity }
1097impl_partial_eq! { ArrayBufferView for Float64Array use identity }
1098impl_partial_eq! { TypedArray for Float64Array use identity }
1099impl_partial_eq! { Float64Array for Float64Array use identity }
1100
1101#[repr(C)]
1103#[derive(Debug)]
1104pub struct Int16Array(Opaque);
1105
1106impl_deref! { TypedArray for Int16Array }
1107impl_try_from! { Data for Int16Array if v => v.is_value() && cast::<Value>(v).is_int16_array() }
1108impl_try_from! { Value for Int16Array if v => v.is_int16_array() }
1109impl_try_from! { Object for Int16Array if v => v.is_int16_array() }
1110impl_try_from! { ArrayBufferView for Int16Array if v => v.is_int16_array() }
1111impl_try_from! { TypedArray for Int16Array if v => v.is_int16_array() }
1112impl_eq! { for Int16Array }
1113impl_hash! { for Int16Array use get_identity_hash }
1114impl_partial_eq! { Data for Int16Array use identity }
1115impl_partial_eq! { Value for Int16Array use identity }
1116impl_partial_eq! { Object for Int16Array use identity }
1117impl_partial_eq! { ArrayBufferView for Int16Array use identity }
1118impl_partial_eq! { TypedArray for Int16Array use identity }
1119impl_partial_eq! { Int16Array for Int16Array use identity }
1120
1121#[repr(C)]
1123#[derive(Debug)]
1124pub struct Int32Array(Opaque);
1125
1126impl_deref! { TypedArray for Int32Array }
1127impl_try_from! { Data for Int32Array if v => v.is_value() && cast::<Value>(v).is_int32_array() }
1128impl_try_from! { Value for Int32Array if v => v.is_int32_array() }
1129impl_try_from! { Object for Int32Array if v => v.is_int32_array() }
1130impl_try_from! { ArrayBufferView for Int32Array if v => v.is_int32_array() }
1131impl_try_from! { TypedArray for Int32Array if v => v.is_int32_array() }
1132impl_eq! { for Int32Array }
1133impl_hash! { for Int32Array use get_identity_hash }
1134impl_partial_eq! { Data for Int32Array use identity }
1135impl_partial_eq! { Value for Int32Array use identity }
1136impl_partial_eq! { Object for Int32Array use identity }
1137impl_partial_eq! { ArrayBufferView for Int32Array use identity }
1138impl_partial_eq! { TypedArray for Int32Array use identity }
1139impl_partial_eq! { Int32Array for Int32Array use identity }
1140
1141#[repr(C)]
1143#[derive(Debug)]
1144pub struct Int8Array(Opaque);
1145
1146impl_deref! { TypedArray for Int8Array }
1147impl_try_from! { Data for Int8Array if v => v.is_value() && cast::<Value>(v).is_int8_array() }
1148impl_try_from! { Value for Int8Array if v => v.is_int8_array() }
1149impl_try_from! { Object for Int8Array if v => v.is_int8_array() }
1150impl_try_from! { ArrayBufferView for Int8Array if v => v.is_int8_array() }
1151impl_try_from! { TypedArray for Int8Array if v => v.is_int8_array() }
1152impl_eq! { for Int8Array }
1153impl_hash! { for Int8Array use get_identity_hash }
1154impl_partial_eq! { Data for Int8Array use identity }
1155impl_partial_eq! { Value for Int8Array use identity }
1156impl_partial_eq! { Object for Int8Array use identity }
1157impl_partial_eq! { ArrayBufferView for Int8Array use identity }
1158impl_partial_eq! { TypedArray for Int8Array use identity }
1159impl_partial_eq! { Int8Array for Int8Array use identity }
1160
1161#[repr(C)]
1163#[derive(Debug)]
1164pub struct Uint16Array(Opaque);
1165
1166impl_deref! { TypedArray for Uint16Array }
1167impl_try_from! { Data for Uint16Array if v => v.is_value() && cast::<Value>(v).is_uint16_array() }
1168impl_try_from! { Value for Uint16Array if v => v.is_uint16_array() }
1169impl_try_from! { Object for Uint16Array if v => v.is_uint16_array() }
1170impl_try_from! { ArrayBufferView for Uint16Array if v => v.is_uint16_array() }
1171impl_try_from! { TypedArray for Uint16Array if v => v.is_uint16_array() }
1172impl_eq! { for Uint16Array }
1173impl_hash! { for Uint16Array use get_identity_hash }
1174impl_partial_eq! { Data for Uint16Array use identity }
1175impl_partial_eq! { Value for Uint16Array use identity }
1176impl_partial_eq! { Object for Uint16Array use identity }
1177impl_partial_eq! { ArrayBufferView for Uint16Array use identity }
1178impl_partial_eq! { TypedArray for Uint16Array use identity }
1179impl_partial_eq! { Uint16Array for Uint16Array use identity }
1180
1181#[repr(C)]
1183#[derive(Debug)]
1184pub struct Uint32Array(Opaque);
1185
1186impl_deref! { TypedArray for Uint32Array }
1187impl_try_from! { Data for Uint32Array if v => v.is_value() && cast::<Value>(v).is_uint32_array() }
1188impl_try_from! { Value for Uint32Array if v => v.is_uint32_array() }
1189impl_try_from! { Object for Uint32Array if v => v.is_uint32_array() }
1190impl_try_from! { ArrayBufferView for Uint32Array if v => v.is_uint32_array() }
1191impl_try_from! { TypedArray for Uint32Array if v => v.is_uint32_array() }
1192impl_eq! { for Uint32Array }
1193impl_hash! { for Uint32Array use get_identity_hash }
1194impl_partial_eq! { Data for Uint32Array use identity }
1195impl_partial_eq! { Value for Uint32Array use identity }
1196impl_partial_eq! { Object for Uint32Array use identity }
1197impl_partial_eq! { ArrayBufferView for Uint32Array use identity }
1198impl_partial_eq! { TypedArray for Uint32Array use identity }
1199impl_partial_eq! { Uint32Array for Uint32Array use identity }
1200
1201#[repr(C)]
1203#[derive(Debug)]
1204pub struct Uint8Array(Opaque);
1205
1206impl_deref! { TypedArray for Uint8Array }
1207impl_try_from! { Data for Uint8Array if v => v.is_value() && cast::<Value>(v).is_uint8_array() }
1208impl_try_from! { Value for Uint8Array if v => v.is_uint8_array() }
1209impl_try_from! { Object for Uint8Array if v => v.is_uint8_array() }
1210impl_try_from! { ArrayBufferView for Uint8Array if v => v.is_uint8_array() }
1211impl_try_from! { TypedArray for Uint8Array if v => v.is_uint8_array() }
1212impl_eq! { for Uint8Array }
1213impl_hash! { for Uint8Array use get_identity_hash }
1214impl_partial_eq! { Data for Uint8Array use identity }
1215impl_partial_eq! { Value for Uint8Array use identity }
1216impl_partial_eq! { Object for Uint8Array use identity }
1217impl_partial_eq! { ArrayBufferView for Uint8Array use identity }
1218impl_partial_eq! { TypedArray for Uint8Array use identity }
1219impl_partial_eq! { Uint8Array for Uint8Array use identity }
1220
1221#[repr(C)]
1223#[derive(Debug)]
1224pub struct Uint8ClampedArray(Opaque);
1225
1226impl_deref! { TypedArray for Uint8ClampedArray }
1227impl_try_from! { Data for Uint8ClampedArray if v => v.is_value() && cast::<Value>(v).is_uint8_clamped_array() }
1228impl_try_from! { Value for Uint8ClampedArray if v => v.is_uint8_clamped_array() }
1229impl_try_from! { Object for Uint8ClampedArray if v => v.is_uint8_clamped_array() }
1230impl_try_from! { ArrayBufferView for Uint8ClampedArray if v => v.is_uint8_clamped_array() }
1231impl_try_from! { TypedArray for Uint8ClampedArray if v => v.is_uint8_clamped_array() }
1232impl_eq! { for Uint8ClampedArray }
1233impl_hash! { for Uint8ClampedArray use get_identity_hash }
1234impl_partial_eq! { Data for Uint8ClampedArray use identity }
1235impl_partial_eq! { Value for Uint8ClampedArray use identity }
1236impl_partial_eq! { Object for Uint8ClampedArray use identity }
1237impl_partial_eq! { ArrayBufferView for Uint8ClampedArray use identity }
1238impl_partial_eq! { TypedArray for Uint8ClampedArray use identity }
1239impl_partial_eq! { Uint8ClampedArray for Uint8ClampedArray use identity }
1240
1241#[repr(C)]
1243#[derive(Debug)]
1244pub struct BigIntObject(Opaque);
1245
1246impl_deref! { Object for BigIntObject }
1247impl_try_from! { Data for BigIntObject if v => v.is_value() && cast::<Value>(v).is_big_int_object() }
1248impl_try_from! { Value for BigIntObject if v => v.is_big_int_object() }
1249impl_try_from! { Object for BigIntObject if v => v.is_big_int_object() }
1250impl_eq! { for BigIntObject }
1251impl_hash! { for BigIntObject use get_identity_hash }
1252impl_partial_eq! { Data for BigIntObject use identity }
1253impl_partial_eq! { Value for BigIntObject use identity }
1254impl_partial_eq! { Object for BigIntObject use identity }
1255impl_partial_eq! { BigIntObject for BigIntObject use identity }
1256
1257#[repr(C)]
1259#[derive(Debug)]
1260pub struct BooleanObject(Opaque);
1261
1262impl_deref! { Object for BooleanObject }
1263impl_try_from! { Data for BooleanObject if v => v.is_value() && cast::<Value>(v).is_boolean_object() }
1264impl_try_from! { Value for BooleanObject if v => v.is_boolean_object() }
1265impl_try_from! { Object for BooleanObject if v => v.is_boolean_object() }
1266impl_eq! { for BooleanObject }
1267impl_hash! { for BooleanObject use get_identity_hash }
1268impl_partial_eq! { Data for BooleanObject use identity }
1269impl_partial_eq! { Value for BooleanObject use identity }
1270impl_partial_eq! { Object for BooleanObject use identity }
1271impl_partial_eq! { BooleanObject for BooleanObject use identity }
1272
1273#[repr(C)]
1275#[derive(Debug)]
1276pub struct Date(Opaque);
1277
1278impl_deref! { Object for Date }
1279impl_try_from! { Data for Date if v => v.is_value() && cast::<Value>(v).is_date() }
1280impl_try_from! { Value for Date if v => v.is_date() }
1281impl_try_from! { Object for Date if v => v.is_date() }
1282impl_eq! { for Date }
1283impl_hash! { for Date use get_identity_hash }
1284impl_partial_eq! { Data for Date use identity }
1285impl_partial_eq! { Value for Date use identity }
1286impl_partial_eq! { Object for Date use identity }
1287impl_partial_eq! { Date for Date use identity }
1288
1289#[repr(C)]
1291#[derive(Debug)]
1292pub struct Function(Opaque);
1293
1294impl_deref! { Object for Function }
1295impl_try_from! { Data for Function if v => v.is_value() && cast::<Value>(v).is_function() }
1296impl_try_from! { Value for Function if v => v.is_function() }
1297impl_try_from! { Object for Function if v => v.is_function() }
1298impl_eq! { for Function }
1299impl_hash! { for Function use get_identity_hash }
1300impl_partial_eq! { Data for Function use identity }
1301impl_partial_eq! { Value for Function use identity }
1302impl_partial_eq! { Object for Function use identity }
1303impl_partial_eq! { Function for Function use identity }
1304
1305#[repr(C)]
1307#[derive(Debug)]
1308pub struct Map(Opaque);
1309
1310impl_deref! { Object for Map }
1311impl_try_from! { Data for Map if v => v.is_value() && cast::<Value>(v).is_map() }
1312impl_try_from! { Value for Map if v => v.is_map() }
1313impl_try_from! { Object for Map if v => v.is_map() }
1314impl_eq! { for Map }
1315impl_hash! { for Map use get_identity_hash }
1316impl_partial_eq! { Data for Map use identity }
1317impl_partial_eq! { Value for Map use identity }
1318impl_partial_eq! { Object for Map use identity }
1319impl_partial_eq! { Map for Map use identity }
1320
1321#[repr(C)]
1323#[derive(Debug)]
1324pub struct NumberObject(Opaque);
1325
1326impl_deref! { Object for NumberObject }
1327impl_try_from! { Data for NumberObject if v => v.is_value() && cast::<Value>(v).is_number_object() }
1328impl_try_from! { Value for NumberObject if v => v.is_number_object() }
1329impl_try_from! { Object for NumberObject if v => v.is_number_object() }
1330impl_eq! { for NumberObject }
1331impl_hash! { for NumberObject use get_identity_hash }
1332impl_partial_eq! { Data for NumberObject use identity }
1333impl_partial_eq! { Value for NumberObject use identity }
1334impl_partial_eq! { Object for NumberObject use identity }
1335impl_partial_eq! { NumberObject for NumberObject use identity }
1336
1337#[repr(C)]
1339#[derive(Debug)]
1340pub struct Promise(Opaque);
1341
1342impl_deref! { Object for Promise }
1343impl_try_from! { Data for Promise if v => v.is_value() && cast::<Value>(v).is_promise() }
1344impl_try_from! { Value for Promise if v => v.is_promise() }
1345impl_try_from! { Object for Promise if v => v.is_promise() }
1346impl_eq! { for Promise }
1347impl_hash! { for Promise use get_identity_hash }
1348impl_partial_eq! { Data for Promise use identity }
1349impl_partial_eq! { Value for Promise use identity }
1350impl_partial_eq! { Object for Promise use identity }
1351impl_partial_eq! { Promise for Promise use identity }
1352
1353#[repr(C)]
1354#[derive(Debug)]
1355pub struct PromiseResolver(Opaque);
1356
1357impl_deref! { Object for PromiseResolver }
1358impl_eq! { for PromiseResolver }
1359impl_hash! { for PromiseResolver use get_identity_hash }
1360impl_partial_eq! { Data for PromiseResolver use identity }
1361impl_partial_eq! { Value for PromiseResolver use identity }
1362impl_partial_eq! { Object for PromiseResolver use identity }
1363impl_partial_eq! { PromiseResolver for PromiseResolver use identity }
1364
1365#[repr(C)]
1368#[derive(Debug)]
1369pub struct Proxy(Opaque);
1370
1371impl_deref! { Object for Proxy }
1372impl_try_from! { Data for Proxy if v => v.is_value() && cast::<Value>(v).is_proxy() }
1373impl_try_from! { Value for Proxy if v => v.is_proxy() }
1374impl_try_from! { Object for Proxy if v => v.is_proxy() }
1375impl_eq! { for Proxy }
1376impl_hash! { for Proxy use get_identity_hash }
1377impl_partial_eq! { Data for Proxy use identity }
1378impl_partial_eq! { Value for Proxy use identity }
1379impl_partial_eq! { Object for Proxy use identity }
1380impl_partial_eq! { Proxy for Proxy use identity }
1381
1382#[repr(C)]
1384#[derive(Debug)]
1385pub struct RegExp(Opaque);
1386
1387impl_deref! { Object for RegExp }
1388impl_try_from! { Data for RegExp if v => v.is_value() && cast::<Value>(v).is_reg_exp() }
1389impl_try_from! { Value for RegExp if v => v.is_reg_exp() }
1390impl_try_from! { Object for RegExp if v => v.is_reg_exp() }
1391impl_eq! { for RegExp }
1392impl_hash! { for RegExp use get_identity_hash }
1393impl_partial_eq! { Data for RegExp use identity }
1394impl_partial_eq! { Value for RegExp use identity }
1395impl_partial_eq! { Object for RegExp use identity }
1396impl_partial_eq! { RegExp for RegExp use identity }
1397
1398#[repr(C)]
1400#[derive(Debug)]
1401pub struct Set(Opaque);
1402
1403impl_deref! { Object for Set }
1404impl_try_from! { Data for Set if v => v.is_value() && cast::<Value>(v).is_set() }
1405impl_try_from! { Value for Set if v => v.is_set() }
1406impl_try_from! { Object for Set if v => v.is_set() }
1407impl_eq! { for Set }
1408impl_hash! { for Set use get_identity_hash }
1409impl_partial_eq! { Data for Set use identity }
1410impl_partial_eq! { Value for Set use identity }
1411impl_partial_eq! { Object for Set use identity }
1412impl_partial_eq! { Set for Set use identity }
1413
1414#[repr(C)]
1416#[derive(Debug)]
1417pub struct SharedArrayBuffer(Opaque);
1418
1419impl_deref! { Object for SharedArrayBuffer }
1420impl_try_from! { Data for SharedArrayBuffer if v => v.is_value() && cast::<Value>(v).is_shared_array_buffer() }
1421impl_try_from! { Value for SharedArrayBuffer if v => v.is_shared_array_buffer() }
1422impl_try_from! { Object for SharedArrayBuffer if v => v.is_shared_array_buffer() }
1423impl_eq! { for SharedArrayBuffer }
1424impl_hash! { for SharedArrayBuffer use get_identity_hash }
1425impl_partial_eq! { Data for SharedArrayBuffer use identity }
1426impl_partial_eq! { Value for SharedArrayBuffer use identity }
1427impl_partial_eq! { Object for SharedArrayBuffer use identity }
1428impl_partial_eq! { SharedArrayBuffer for SharedArrayBuffer use identity }
1429
1430#[repr(C)]
1432#[derive(Debug)]
1433pub struct StringObject(Opaque);
1434
1435impl_deref! { Object for StringObject }
1436impl_try_from! { Data for StringObject if v => v.is_value() && cast::<Value>(v).is_string_object() }
1437impl_try_from! { Value for StringObject if v => v.is_string_object() }
1438impl_try_from! { Object for StringObject if v => v.is_string_object() }
1439impl_eq! { for StringObject }
1440impl_hash! { for StringObject use get_identity_hash }
1441impl_partial_eq! { Data for StringObject use identity }
1442impl_partial_eq! { Value for StringObject use identity }
1443impl_partial_eq! { Object for StringObject use identity }
1444impl_partial_eq! { StringObject for StringObject use identity }
1445
1446#[repr(C)]
1448#[derive(Debug)]
1449pub struct SymbolObject(Opaque);
1450
1451impl_deref! { Object for SymbolObject }
1452impl_try_from! { Data for SymbolObject if v => v.is_value() && cast::<Value>(v).is_symbol_object() }
1453impl_try_from! { Value for SymbolObject if v => v.is_symbol_object() }
1454impl_try_from! { Object for SymbolObject if v => v.is_symbol_object() }
1455impl_eq! { for SymbolObject }
1456impl_hash! { for SymbolObject use get_identity_hash }
1457impl_partial_eq! { Data for SymbolObject use identity }
1458impl_partial_eq! { Value for SymbolObject use identity }
1459impl_partial_eq! { Object for SymbolObject use identity }
1460impl_partial_eq! { SymbolObject for SymbolObject use identity }
1461
1462#[repr(C)]
1463#[derive(Debug)]
1464pub struct WasmMemoryObject(Opaque);
1465
1466impl_deref! { Object for WasmMemoryObject }
1467impl_try_from! { Data for WasmMemoryObject if v => v.is_value() && cast::<Value>(v).is_wasm_memory_object() }
1468impl_try_from! { Value for WasmMemoryObject if v => v.is_wasm_memory_object() }
1469impl_try_from! { Object for WasmMemoryObject if v => v.is_wasm_memory_object() }
1470impl_eq! { for WasmMemoryObject }
1471impl_hash! { for WasmMemoryObject use get_identity_hash }
1472impl_partial_eq! { Data for WasmMemoryObject use identity }
1473impl_partial_eq! { Value for WasmMemoryObject use identity }
1474impl_partial_eq! { Object for WasmMemoryObject use identity }
1475impl_partial_eq! { WasmMemoryObject for WasmMemoryObject use identity }
1476
1477#[repr(C)]
1478#[derive(Debug)]
1479pub struct WasmModuleObject(Opaque);
1480
1481impl_deref! { Object for WasmModuleObject }
1482impl_try_from! { Data for WasmModuleObject if v => v.is_value() && cast::<Value>(v).is_wasm_module_object() }
1483impl_try_from! { Value for WasmModuleObject if v => v.is_wasm_module_object() }
1484impl_try_from! { Object for WasmModuleObject if v => v.is_wasm_module_object() }
1485impl_eq! { for WasmModuleObject }
1486impl_hash! { for WasmModuleObject use get_identity_hash }
1487impl_partial_eq! { Data for WasmModuleObject use identity }
1488impl_partial_eq! { Value for WasmModuleObject use identity }
1489impl_partial_eq! { Object for WasmModuleObject use identity }
1490impl_partial_eq! { WasmModuleObject for WasmModuleObject use identity }
1491
1492#[repr(C)]
1494#[derive(Debug)]
1495pub struct Primitive(Opaque);
1496
1497impl_deref! { Value for Primitive }
1498impl_try_from! { Data for Primitive if v => v.is_primitive() }
1499impl_try_from! { Value for Primitive if v => v.is_primitive() }
1500impl_from! { BigInt for Primitive }
1501impl_from! { Boolean for Primitive }
1502impl_from! { Name for Primitive }
1503impl_from! { String for Primitive }
1504impl_from! { Symbol for Primitive }
1505impl_from! { Number for Primitive }
1506impl_from! { Integer for Primitive }
1507impl_from! { Int32 for Primitive }
1508impl_from! { Uint32 for Primitive }
1509impl_eq! { for Primitive }
1510impl_hash! { for Primitive use get_hash }
1511impl_partial_eq! { Value for Primitive use same_value_zero }
1512impl_partial_eq! { Primitive for Primitive use same_value_zero }
1513impl_partial_eq! { BigInt for Primitive use same_value_zero }
1514impl_partial_eq! { Boolean for Primitive use identity }
1515impl_partial_eq! { Name for Primitive use same_value_zero }
1516impl_partial_eq! { String for Primitive use same_value_zero }
1517impl_partial_eq! { Symbol for Primitive use identity }
1518impl_partial_eq! { Number for Primitive use same_value_zero }
1519impl_partial_eq! { Integer for Primitive use same_value_zero }
1520impl_partial_eq! { Int32 for Primitive use same_value_zero }
1521impl_partial_eq! { Uint32 for Primitive use same_value_zero }
1522
1523#[repr(C)]
1525#[derive(Debug)]
1526pub struct BigInt(Opaque);
1527
1528impl_deref! { Primitive for BigInt }
1529impl_try_from! { Data for BigInt if v => v.is_big_int() }
1530impl_try_from! { Value for BigInt if v => v.is_big_int() }
1531impl_try_from! { Primitive for BigInt if v => v.is_big_int() }
1532impl_eq! { for BigInt }
1533impl_hash! { for BigInt use get_hash }
1534impl_partial_eq! { Value for BigInt use same_value_zero }
1535impl_partial_eq! { Primitive for BigInt use same_value_zero }
1536impl_partial_eq! { BigInt for BigInt use strict_equals }
1537
1538#[repr(C)]
1541#[derive(Debug)]
1542pub struct Boolean(Opaque);
1543
1544impl_deref! { Primitive for Boolean }
1545impl_try_from! { Data for Boolean if v => v.is_boolean() }
1546impl_try_from! { Value for Boolean if v => v.is_boolean() }
1547impl_try_from! { Primitive for Boolean if v => v.is_boolean() }
1548impl_eq! { for Boolean }
1549impl_hash! { for Boolean use get_hash }
1550impl_partial_eq! { Data for Boolean use identity }
1551impl_partial_eq! { Value for Boolean use identity }
1552impl_partial_eq! { Primitive for Boolean use identity }
1553impl_partial_eq! { Boolean for Boolean use identity }
1554
1555#[repr(C)]
1557#[derive(Debug)]
1558pub struct Name(Opaque);
1559
1560impl_deref! { Primitive for Name }
1561impl_try_from! { Data for Name if v => v.is_name() }
1562impl_try_from! { Value for Name if v => v.is_name() }
1563impl_try_from! { Primitive for Name if v => v.is_name() }
1564impl_from! { String for Name }
1565impl_from! { Symbol for Name }
1566impl_eq! { for Name }
1567impl_hash! { for Name use get_identity_hash }
1568impl_partial_eq! { Value for Name use same_value_zero }
1569impl_partial_eq! { Primitive for Name use same_value_zero }
1570impl_partial_eq! { Name for Name use strict_equals }
1571impl_partial_eq! { String for Name use strict_equals }
1572impl_partial_eq! { Symbol for Name use identity }
1573
1574#[repr(C)]
1576#[derive(Debug)]
1577pub struct String(Opaque);
1578
1579impl_deref! { Name for String }
1580impl_try_from! { Data for String if v => v.is_string() }
1581impl_try_from! { Value for String if v => v.is_string() }
1582impl_try_from! { Primitive for String if v => v.is_string() }
1583impl_try_from! { Name for String if v => v.is_string() }
1584impl_eq! { for String }
1585impl_hash! { for String use get_identity_hash }
1586impl_partial_eq! { Value for String use same_value_zero }
1587impl_partial_eq! { Primitive for String use same_value_zero }
1588impl_partial_eq! { Name for String use strict_equals }
1589impl_partial_eq! { String for String use strict_equals }
1590
1591#[repr(C)]
1593#[derive(Debug)]
1594pub struct Symbol(Opaque);
1595
1596impl_deref! { Name for Symbol }
1597impl_try_from! { Data for Symbol if v => v.is_symbol() }
1598impl_try_from! { Value for Symbol if v => v.is_symbol() }
1599impl_try_from! { Primitive for Symbol if v => v.is_symbol() }
1600impl_try_from! { Name for Symbol if v => v.is_symbol() }
1601impl_eq! { for Symbol }
1602impl_hash! { for Symbol use get_identity_hash }
1603impl_partial_eq! { Data for Symbol use identity }
1604impl_partial_eq! { Value for Symbol use identity }
1605impl_partial_eq! { Primitive for Symbol use identity }
1606impl_partial_eq! { Name for Symbol use identity }
1607impl_partial_eq! { Symbol for Symbol use identity }
1608
1609#[repr(C)]
1611#[derive(Debug)]
1612pub struct Number(Opaque);
1613
1614impl_deref! { Primitive for Number }
1615impl_try_from! { Data for Number if v => v.is_number() }
1616impl_try_from! { Value for Number if v => v.is_number() }
1617impl_try_from! { Primitive for Number if v => v.is_number() }
1618impl_from! { Integer for Number }
1619impl_from! { Int32 for Number }
1620impl_from! { Uint32 for Number }
1621impl_eq! { for Number }
1622impl_hash! { for Number use get_hash }
1623impl_partial_eq! { Value for Number use same_value_zero }
1624impl_partial_eq! { Primitive for Number use same_value_zero }
1625impl_partial_eq! { Number for Number use same_value_zero }
1626impl_partial_eq! { Integer for Number use same_value_zero }
1627impl_partial_eq! { Int32 for Number use same_value_zero }
1628impl_partial_eq! { Uint32 for Number use same_value_zero }
1629
1630#[repr(C)]
1632#[derive(Debug)]
1633pub struct Integer(Opaque);
1634
1635impl_deref! { Number for Integer }
1636impl_try_from! { Data for Integer if v => v.is_number() && (cast::<Number>(v).is_int32() || cast::<Number>(v).is_uint32()) }
1637impl_try_from! { Value for Integer if v => v.is_int32() || v.is_uint32() }
1638impl_try_from! { Primitive for Integer if v => v.is_int32() || v.is_uint32() }
1639impl_try_from! { Number for Integer if v => v.is_int32() || v.is_uint32() }
1640impl_from! { Int32 for Integer }
1641impl_from! { Uint32 for Integer }
1642impl_eq! { for Integer }
1643impl_hash! { for Integer use get_hash }
1644impl_partial_eq! { Value for Integer use same_value_zero }
1645impl_partial_eq! { Primitive for Integer use same_value_zero }
1646impl_partial_eq! { Number for Integer use same_value_zero }
1647impl_partial_eq! { Integer for Integer use strict_equals }
1648impl_partial_eq! { Int32 for Integer use strict_equals }
1649impl_partial_eq! { Uint32 for Integer use strict_equals }
1650
1651#[repr(C)]
1653#[derive(Debug)]
1654pub struct Int32(Opaque);
1655
1656impl_deref! { Integer for Int32 }
1657impl_try_from! { Data for Int32 if v => v.is_number() && cast::<Number>(v).is_int32() }
1658impl_try_from! { Value for Int32 if v => v.is_int32() }
1659impl_try_from! { Primitive for Int32 if v => v.is_int32() }
1660impl_try_from! { Number for Int32 if v => v.is_int32() }
1661impl_try_from! { Integer for Int32 if v => v.is_int32() }
1662impl_eq! { for Int32 }
1663impl_hash! { for Int32 use get_hash }
1664impl_partial_eq! { Value for Int32 use same_value_zero }
1665impl_partial_eq! { Primitive for Int32 use same_value_zero }
1666impl_partial_eq! { Number for Int32 use same_value_zero }
1667impl_partial_eq! { Integer for Int32 use strict_equals }
1668impl_partial_eq! { Int32 for Int32 use strict_equals }
1669
1670#[repr(C)]
1672#[derive(Debug)]
1673pub struct Uint32(Opaque);
1674
1675impl_deref! { Integer for Uint32 }
1676impl_try_from! { Data for Uint32 if v => v.is_number() && cast::<Number>(v).is_uint32() }
1677impl_try_from! { Value for Uint32 if v => v.is_uint32() }
1678impl_try_from! { Primitive for Uint32 if v => v.is_uint32() }
1679impl_try_from! { Number for Uint32 if v => v.is_uint32() }
1680impl_try_from! { Integer for Uint32 if v => v.is_uint32() }
1681impl_eq! { for Uint32 }
1682impl_hash! { for Uint32 use get_hash }
1683impl_partial_eq! { Value for Uint32 use same_value_zero }
1684impl_partial_eq! { Primitive for Uint32 use same_value_zero }
1685impl_partial_eq! { Number for Uint32 use same_value_zero }
1686impl_partial_eq! { Integer for Uint32 use strict_equals }
1687impl_partial_eq! { Uint32 for Uint32 use strict_equals }