vecdb/iterators/
iterable.rs

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