stdweb/webcore/
symbol.rs

1use webcore::value::Value;
2use webcore::try_from::TryInto;
3
4/// A type representing a JavaScript `Symbol`.
5#[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        // TODO: Speed this up.
22        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}