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