reflect_tools/reflect/fields/
hmap.rs1use 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