rust_queries_core/
queryable.rs1use std::collections::{HashMap, HashSet, BTreeMap, BTreeSet, VecDeque, LinkedList};
7
8pub trait Queryable<T> {
12 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_>;
14}
15
16impl<T> Queryable<T> for [T] {
18 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
19 Box::new(self.iter())
20 }
21}
22
23impl<T> Queryable<T> for Vec<T> {
25 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
26 Box::new(self.iter())
27 }
28}
29
30impl<T> Queryable<T> for VecDeque<T> {
32 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
33 Box::new(self.iter())
34 }
35}
36
37impl<T> Queryable<T> for LinkedList<T> {
39 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
40 Box::new(self.iter())
41 }
42}
43
44impl<T> Queryable<T> for HashSet<T>
46where
47 T: Eq + std::hash::Hash,
48{
49 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
50 Box::new(self.iter())
51 }
52}
53
54impl<T> Queryable<T> for BTreeSet<T>
56where
57 T: Ord,
58{
59 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
60 Box::new(self.iter())
61 }
62}
63
64impl<K, V> Queryable<V> for HashMap<K, V>
66where
67 K: Eq + std::hash::Hash,
68{
69 fn query_iter(&self) -> Box<dyn Iterator<Item = &V> + '_> {
70 Box::new(self.values())
71 }
72}
73
74impl<K, V> Queryable<V> for BTreeMap<K, V>
76where
77 K: Ord,
78{
79 fn query_iter(&self) -> Box<dyn Iterator<Item = &V> + '_> {
80 Box::new(self.values())
81 }
82}
83
84impl<T, const N: usize> Queryable<T> for [T; N] {
86 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
87 Box::new(self.iter())
88 }
89}
90
91impl<T> Queryable<T> for Option<T> {
93 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
94 Box::new(self.iter())
95 }
96}
97
98impl<T, E> Queryable<T> for Result<T, E> {
100 fn query_iter(&self) -> Box<dyn Iterator<Item = &T> + '_> {
101 Box::new(self.iter())
102 }
103}
104