@@ -23,6 +23,48 @@ pub type FieldName = Arc<str>;
2323#[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
2424pub struct FieldNames ( Arc < [ FieldName ] > ) ;
2525
26+ impl PartialEq < & FieldNames > for FieldNames {
27+ fn eq ( & self , other : & & FieldNames ) -> bool {
28+ self == * other
29+ }
30+ }
31+
32+ impl PartialEq < & [ & str ] > for FieldNames {
33+ fn eq ( & self , other : & & [ & str ] ) -> bool {
34+ self . len ( ) == other. len ( ) && self . iter ( ) . zip_eq ( other. iter ( ) ) . all ( |( l, r) | & * * l == * r)
35+ }
36+ }
37+
38+ impl PartialEq < & [ & str ] > for & FieldNames {
39+ fn eq ( & self , other : & & [ & str ] ) -> bool {
40+ * self == other
41+ }
42+ }
43+
44+ impl < const N : usize > PartialEq < [ & str ; N ] > for FieldNames {
45+ fn eq ( & self , other : & [ & str ; N ] ) -> bool {
46+ self == other. as_slice ( )
47+ }
48+ }
49+
50+ impl < const N : usize > PartialEq < [ & str ; N ] > for & FieldNames {
51+ fn eq ( & self , other : & [ & str ; N ] ) -> bool {
52+ * self == other. as_slice ( )
53+ }
54+ }
55+
56+ impl PartialEq < & [ FieldName ] > for FieldNames {
57+ fn eq ( & self , other : & & [ FieldName ] ) -> bool {
58+ self . 0 . as_ref ( ) == * other
59+ }
60+ }
61+
62+ impl PartialEq < & [ FieldName ] > for & FieldNames {
63+ fn eq ( & self , other : & & [ FieldName ] ) -> bool {
64+ self . 0 . as_ref ( ) == * other
65+ }
66+ }
67+
2668impl FieldNames {
2769 /// Returns the number of elements.
2870 pub fn len ( & self ) -> usize {
@@ -457,4 +499,40 @@ mod tests {
457499 assert_eq ! ( iter. next( ) , Some ( "b" . into( ) ) ) ;
458500 assert_eq ! ( iter. next( ) , None ) ;
459501 }
502+
503+ #[ test]
504+ fn test_field_names_equality ( ) {
505+ let field_names = FieldNames :: from ( [ "field1" , "field2" , "field3" ] ) ;
506+
507+ // FieldNames == &FieldNames
508+ let field_names_ref = & field_names;
509+ assert_eq ! ( field_names, field_names_ref) ;
510+
511+ // FieldNames == &[&str]
512+ let str_slice = & [ "field1" , "field2" , "field3" ] [ ..] ;
513+ assert_eq ! ( field_names, str_slice) ;
514+
515+ // &FieldNames == &[&str]
516+ assert_eq ! ( & field_names, str_slice) ;
517+
518+ // FieldNames == [&str; N] (array)
519+ assert_eq ! ( field_names, [ "field1" , "field2" , "field3" ] ) ;
520+
521+ // &FieldNames == [&str; N] (array)
522+ assert_eq ! ( & field_names, [ "field1" , "field2" , "field3" ] ) ;
523+
524+ // FieldNames == &[FieldName]
525+ let field_name_vec: Vec < FieldName > =
526+ vec ! [ "field1" . into( ) , "field2" . into( ) , "field3" . into( ) ] ;
527+ let field_name_slice = field_name_vec. as_slice ( ) ;
528+ assert_eq ! ( field_names, field_name_slice) ;
529+
530+ // &FieldNames == &[FieldName]
531+ assert_eq ! ( & field_names, field_name_slice) ;
532+
533+ // Test inequality cases
534+ assert_ne ! ( field_names, & [ "field1" , "field2" ] [ ..] ) ;
535+ assert_ne ! ( field_names, [ "different" , "fields" , "here" ] ) ;
536+ assert_ne ! ( field_names, & [ "field1" , "field2" , "field3" , "extra" ] [ ..] ) ;
537+ }
460538}
0 commit comments