1 use crate::reflect::runtime_types::RuntimeTypeTrait;
2 use crate::reflect::ProtobufValue;
3 use crate::reflect::ReflectValueRef;
4 
5 pub(crate) struct ReflectRepeatedIter<'a> {
6     imp: Box<dyn Iterator<Item = ReflectValueRef<'a>> + 'a>,
7 }
8 
9 impl<'a> ReflectRepeatedIter<'a> {
new( iter: impl Iterator<Item = ReflectValueRef<'a>> + '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 
new_slice<V: ProtobufValue>(slice: &'a [V]) -> ReflectRepeatedIter<'a>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 
23 impl<'a> Iterator for ReflectRepeatedIter<'a> {
24     type Item = ReflectValueRef<'a>;
25 
next(&mut self) -> Option<ReflectValueRef<'a>>26     fn next(&mut self) -> Option<ReflectValueRef<'a>> {
27         self.imp.next()
28     }
29 }
30