1use webcore::value::Value;
2use webcore::try_from::TryInto;
3
4#[derive(Debug)]
6pub struct Symbol( pub(crate) i32 );
7
8impl Clone for Symbol {
9 fn clone( &self ) -> Self {
10 let id = __js_raw_asm_int!( concat!(
11 "var value = Module.STDWEB_PRIVATE.get_raw_value( $0 );",
12 "return Module.STDWEB_PRIVATE.register_raw_value( value );"
13 ), self.0 );
14
15 Symbol( id )
16 }
17}
18
19impl PartialEq for Symbol {
20 fn eq( &self, rhs: &Symbol ) -> bool {
21 js!(
23 return Module.STDWEB_PRIVATE.get_raw_value( @{self.0} ) === Module.STDWEB_PRIVATE.get_raw_value( @{rhs.0} );
24 ).try_into().unwrap()
25 }
26}
27
28impl Drop for Symbol {
29 fn drop( &mut self ) {
30 js!( @(no_return)
31 Module.STDWEB_PRIVATE.unregister_raw_value( @{self.0} );
32 );
33 }
34}
35
36impl From< Symbol > for Value {
37 #[inline]
38 fn from( symbol: Symbol ) -> Self {
39 Value::Symbol( symbol )
40 }
41}