@@ -17,11 +17,9 @@ use delegate::delegate;
17
17
pub use error:: EmptyString ;
18
18
use std:: { fmt:: Display , str:: FromStr } ;
19
19
20
-
21
-
22
20
/// A simple String wrapper type, similar to NonZeroUsize and friends.
23
21
/// Guarantees that the String contained inside is not of length 0.
24
- #[ derive( Debug , Clone , PartialEq , Eq , PartialOrd , Ord ) ]
22
+ #[ derive( Debug , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ]
25
23
#[ repr( transparent) ]
26
24
pub struct NonEmptyString ( String ) ;
27
25
@@ -177,6 +175,9 @@ impl From<NonEmptyString> for String {
177
175
178
176
#[ cfg( test) ]
179
177
mod tests {
178
+ use std:: collections:: HashMap ;
179
+ use std:: collections:: HashSet ;
180
+
180
181
use super :: * ;
181
182
182
183
#[ test]
@@ -246,4 +247,19 @@ mod tests {
246
247
let non_empty_string = NonEmptyString :: new ( "string" . to_string ( ) ) . unwrap ( ) ;
247
248
let _string = String :: from ( non_empty_string) ;
248
249
}
250
+
251
+ #[ test]
252
+ fn hash_works ( ) {
253
+ let mut map = HashMap :: new ( ) ;
254
+ map. insert ( NonEmptyString :: from_str ( "id.1" ) . unwrap ( ) , 1 ) ;
255
+ map. insert ( NonEmptyString :: from_str ( "id.2" ) . unwrap ( ) , 2 ) ;
256
+
257
+ assert_eq ! ( map. len( ) , 2 ) ;
258
+
259
+ let mut set = HashSet :: new ( ) ;
260
+ set. insert ( NonEmptyString :: from_str ( "1" ) . unwrap ( ) ) ;
261
+ set. insert ( NonEmptyString :: from_str ( "2" ) . unwrap ( ) ) ;
262
+
263
+ assert_eq ! ( set. len( ) , 2 ) ;
264
+ }
249
265
}
0 commit comments