aboutsummaryrefslogtreecommitdiff
path: root/src/reflect/repeated/iter.rs
blob: 68c072e3c447f5e27ba9ff329a08e96b9973c8d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use crate::reflect::runtime_types::RuntimeTypeTrait;
use crate::reflect::ProtobufValue;
use crate::reflect::ReflectValueRef;

pub(crate) struct ReflectRepeatedIter<'a> {
    imp: Box<dyn Iterator<Item = ReflectValueRef<'a>> + 'a>,
}

impl<'a> ReflectRepeatedIter<'a> {
    pub(crate) fn new(
        iter: impl Iterator<Item = ReflectValueRef<'a>> + 'a,
    ) -> ReflectRepeatedIter<'a> {
        ReflectRepeatedIter {
            imp: Box::new(iter),
        }
    }

    pub(crate) fn new_slice<V: ProtobufValue>(slice: &'a [V]) -> ReflectRepeatedIter<'a> {
        ReflectRepeatedIter::new(slice.into_iter().map(V::RuntimeType::as_ref))
    }
}

impl<'a> Iterator for ReflectRepeatedIter<'a> {
    type Item = ReflectValueRef<'a>;

    fn next(&mut self) -> Option<ReflectValueRef<'a>> {
        self.imp.next()
    }
}