vecdb/iterators/
iterable.rs

1use crate::{AnyStoredVec, AnyVec, BoxedVecIterator, StoredIndex, StoredRaw};
2
3pub trait AnyIterableVec<I, T>: AnyVec {
4    #[allow(clippy::wrong_self_convention)]
5    fn boxed_iter(&self) -> BoxedVecIterator<'_, I, T>
6    where
7        I: StoredIndex,
8        T: StoredRaw;
9
10    fn iter(&self) -> BoxedVecIterator<'_, I, T>
11    where
12        I: StoredIndex,
13        T: StoredRaw,
14    {
15        self.boxed_iter()
16    }
17}
18
19pub trait AnyStoredIterableVec<I, T>: AnyIterableVec<I, T> + AnyStoredVec {}
20
21impl<I, T, U> AnyStoredIterableVec<I, T> for U where U: 'static + AnyIterableVec<I, T> + AnyStoredVec
22{}
23
24pub trait AnyCloneableIterableVec<I, T>: AnyIterableVec<I, T> {
25    fn boxed_clone(&self) -> Box<dyn AnyCloneableIterableVec<I, T>>;
26}
27
28impl<I, T, U> AnyCloneableIterableVec<I, T> for U
29where
30    U: 'static + AnyIterableVec<I, T> + Clone,
31{
32    fn boxed_clone(&self) -> Box<dyn AnyCloneableIterableVec<I, T>> {
33        Box::new(self.clone())
34    }
35}
36
37impl<I, T> Clone for Box<dyn AnyCloneableIterableVec<I, T>> {
38    fn clone(&self) -> Self {
39        self.boxed_clone()
40    }
41}
42
43pub type AnyBoxedIterableVec<I, T> = Box<dyn AnyCloneableIterableVec<I, T>>;