Skip to main content

reflect_tools/reflect/fields/
deque.rs

1//!
2//! Implement fields for Deque.
3//!
4
5use crate :: *;
6use std ::borrow ::Cow;
7use collection_tools ::VecDeque;
8
9impl< V, Borrowed > Fields< usize, &'_ Borrowed > for VecDeque< V >
10where
11  Borrowed: std ::borrow ::ToOwned + 'static + ?Sized,
12  V: std ::borrow ::Borrow< Borrowed >,
13{
14
15  type Key< 'k > = usize
16  where Self: 'k, usize: 'k;
17
18  type Val< 'v > = &'v Borrowed
19  where Self: 'v, V: 'v;
20
21  fn fields< 's >( &'s self ) -> impl IteratorTrait< Item = ( Self ::Key< 's >, Self ::Val< 's > ) >
22  {
23  self.iter().enumerate().map( move | ( key, val ) | ( key, val.borrow() ) )
24 }
25
26}
27
28impl< V, Borrowed > Fields< usize, Option< Cow< '_, Borrowed > > > for VecDeque< V >
29where
30  Borrowed: std ::borrow ::ToOwned + 'static + ?Sized,
31  V: std ::borrow ::Borrow< Borrowed >,
32{
33
34  type Key< 'k > = usize
35  where Self: 'k, usize: 'k;
36
37  type Val< 'v > = Option< Cow< 'v, Borrowed > >
38  where Self: 'v;
39
40  fn fields< 's >( &'s self ) -> impl IteratorTrait< Item = ( Self ::Key< 's >, Self ::Val< 's > ) >
41  {
42  self.iter().enumerate().map( move | ( key, val ) | ( key, Some( Cow ::Borrowed( val.borrow() ) ) ) )
43 }
44
45}
46
47impl< V, Borrowed, Marker > Fields< usize, OptionalCow< '_, Borrowed, Marker > > for VecDeque< V >
48where
49  Borrowed: std ::borrow ::ToOwned + 'static + ?Sized,
50  V: std ::borrow ::Borrow< Borrowed >,
51  Marker: Clone + Copy + 'static,
52{
53
54  type Key< 'k > = usize
55  where Self: 'k, usize: 'k;
56
57  type Val< 'v > = OptionalCow< 'v, Borrowed, Marker >
58  where Self: 'v;
59
60  fn fields< 's >( &'s self ) -> impl IteratorTrait< Item = ( Self ::Key< 's >, Self ::Val< 's > ) >
61  {
62  self.iter().enumerate().map( move | ( key, val ) | ( key, OptionalCow ::from( val.borrow() ) ) )
63 }
64
65}