reflect_tools/reflect/fields/
hmap.rs

1//!
2//! Implement fields for hash map.
3//!
4
5use crate::*;
6use std::borrow::Cow;
7use collection_tools::HashMap;
8
9impl< K, V, Borrowed > Fields< K, &'_ Borrowed > for HashMap< K, V >
10where
11  K : core::hash::Hash + core::cmp::Eq,
12  Borrowed : std::borrow::ToOwned + 'static + ?Sized,
13  V : std::borrow::Borrow< Borrowed >,
14{
15
16  type Key< 'k > = &'k K
17  where Self : 'k, K : 'k;
18
19  type Val< 'v > = &'v Borrowed
20  where Self : 'v, V : 'v;
21
22  fn fields< 's >( &'s self ) -> impl IteratorTrait< Item = ( Self::Key< 's >, Self::Val< 's > ) >
23  {
24    self.iter().map( move | ( key, val ) | ( key, val.borrow() ) )
25  }
26
27}
28
29impl< K, V, Borrowed > Fields< K, Option< Cow< '_, Borrowed > > > for HashMap< K, V >
30where
31  K : core::hash::Hash + core::cmp::Eq,
32  Borrowed : std::borrow::ToOwned + 'static + ?Sized,
33  V : std::borrow::Borrow< Borrowed >,
34{
35
36  type Key< 'k > = &'k K
37  where Self : 'k, K : 'k;
38
39  type Val< 'v > = Option< Cow< 'v, Borrowed > >
40  where Self : 'v, V : 'v;
41
42  fn fields< 's >( &'s self ) -> impl IteratorTrait< Item = ( Self::Key< 's >, Self::Val< 's > ) >
43  {
44    self.iter().map( move | ( key, val ) | ( key, Some( Cow::Borrowed( val.borrow() ) ) ) )
45  }
46
47}
48
49impl< K, V, Borrowed, Marker > Fields< K, OptionalCow< '_, Borrowed, Marker > > for HashMap< K, V >
50where
51  K : core::hash::Hash + core::cmp::Eq,
52  Borrowed : std::borrow::ToOwned + 'static + ?Sized,
53  V : std::borrow::Borrow< Borrowed >,
54  Marker : Clone + Copy + 'static,
55{
56
57  type Key< 'k > = &'k K
58  where Self : 'k, K : 'k;
59
60  type Val< 'v > = OptionalCow< 'v, Borrowed, Marker >
61  where Self : 'v, V : 'v;
62
63  fn fields< 's >( &'s self ) -> impl IteratorTrait< Item = ( Self::Key< 's >, Self::Val< 's > ) >
64  {
65    self.iter().map( move | ( key, val ) | ( key, OptionalCow::from( val.borrow() ) ) )
66  }
67
68}
69
70// impl< K, V, Marker > Fields< K, OptionalCow< '_, V, Marker > > for HashMap< K, V >
71// where
72//   K : core::hash::Hash + core::cmp::Eq,
73//   Marker : Clone + Copy + 'static,
74//   V : std::borrow::ToOwned,
75// {
76//
77//   type Key< 'k > = &'k K
78//   where Self : 'k, K : 'k;
79//
80//   type Val< 'v > = OptionalCow< 'v, V, Marker >
81//   where Self : 'v, V : 'v;
82//
83//   fn fields< 's >( &'s self ) -> impl IteratorTrait< Item = ( Self::Key< 's >, Self::Val< 's > ) >
84//   {
85//     self.iter().map( move | ( key, val ) : ( _, &V ) | -> ( &K, OptionalCow< '_, V, Marker > )
86//     {
87//       ( key, OptionalCow::from( val ) )
88//     })
89//   }
90//
91// }