1 use webcore::value::Reference; 2 use webcore::try_from::TryInto; 3 use private::TODO; 4 5 /// Used by the `dataset` HTML attribute to represent data for custom attributes added to elements. 6 /// 7 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/API/DOMStringMap) 8 // https://html.spec.whatwg.org/#domstringmap 9 #[derive(Clone, Debug, PartialEq, Eq, ReferenceType)] 10 #[reference(instance_of = "DOMStringMap")] 11 pub struct StringMap( Reference ); 12 13 // The methods here are deliberately named exactly as those from Rust's HashMap. 14 impl StringMap { 15 /// Returns a value corresponding to the key. 16 // https://html.spec.whatwg.org/#dom-domstringmap-nameditem get( &self, key: &str ) -> Option< String >17 pub fn get( &self, key: &str ) -> Option< String > { 18 js!( return @{self}[ @{key} ]; ).try_into().ok() 19 } 20 21 /// Inserts a key-value pair into the map. 22 // https://html.spec.whatwg.org/#dom-domstringmap-setitem insert( &self, key: &str, value: &str ) -> Result< (), TODO >23 pub fn insert( &self, key: &str, value: &str ) -> Result< (), TODO > { 24 js!( @(no_return) 25 @{self}[ @{key} ] = @{value}; 26 ); 27 28 Ok(()) 29 } 30 31 /// Removes a key from the map. 32 // https://html.spec.whatwg.org/#dom-domstringmap-removeitem remove( &self, key: &str )33 pub fn remove( &self, key: &str ) { 34 js!( @(no_return) 35 delete @{self}[ @{key} ]; 36 ); 37 } 38 39 /// Returns true if the map contains a value for the specified key. contains_key( &self, key: &str ) -> bool40 pub fn contains_key( &self, key: &str ) -> bool { 41 js!( return @{key} in @{self}; ).try_into().unwrap() 42 } 43 } 44