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
use webcore::value::Value;
use webcore::try_from::TryInto;
#[derive(Debug)]
pub struct Symbol( pub(crate) i32 );
impl Clone for Symbol {
fn clone( &self ) -> Self {
let id = __js_raw_asm!( concat!(
"var value = Module.STDWEB_PRIVATE.get_raw_value( $0 );",
"return Module.STDWEB_PRIVATE.register_raw_value( value );"
), self.0 );
Symbol( id )
}
}
impl PartialEq for Symbol {
fn eq( &self, rhs: &Symbol ) -> bool {
js!(
return Module.STDWEB_PRIVATE.get_raw_value( @{self.0} ) === Module.STDWEB_PRIVATE.get_raw_value( @{rhs.0} );
).try_into().unwrap()
}
}
impl Drop for Symbol {
fn drop( &mut self ) {
js!( @(no_return)
Module.STDWEB_PRIVATE.unregister_raw_value( @{self.0} );
);
}
}
impl From< Symbol > for Value {
#[inline]
fn from( symbol: Symbol ) -> Self {
Value::Symbol( symbol )
}
}