protobuf/reflect/repeated/
iter.rs

1use crate::reflect::runtime_types::RuntimeTypeTrait;
2use crate::reflect::ProtobufValue;
3use crate::reflect::ReflectValueRef;
4
5pub(crate) struct ReflectRepeatedIter<'a> {
6    imp: Box<dyn Iterator<Item = ReflectValueRef<'a>> + 'a>,
7}
8
9impl<'a> ReflectRepeatedIter<'a> {
10    pub(crate) fn new(
11        iter: impl Iterator<Item = ReflectValueRef<'a>> + 'a,
12    ) -> ReflectRepeatedIter<'a> {
13        ReflectRepeatedIter {
14            imp: Box::new(iter),
15        }
16    }
17
18    pub(crate) fn new_slice<V: ProtobufValue>(slice: &'a [V]) -> ReflectRepeatedIter<'a> {
19        ReflectRepeatedIter::new(slice.into_iter().map(V::RuntimeType::as_ref))
20    }
21}
22
23impl<'a> Iterator for ReflectRepeatedIter<'a> {
24    type Item = ReflectValueRef<'a>;
25
26    fn next(&mut self) -> Option<ReflectValueRef<'a>> {
27        self.imp.next()
28    }
29}