Implement ExactSizeIterator and FusedIterator for repeated fields.

PiperOrigin-RevId: 591306340
pull/15071/head
Protobuf Team Bot 1 year ago committed by Copybara-Service
parent 2be44b99cb
commit 14dd8e9ee0
  1. 9
      rust/repeated.rs
  2. 1
      rust/test/shared/accessors_repeated_test.rs

@ -7,6 +7,7 @@
use std::fmt::{self, Debug};
use std::iter;
use std::iter::FusedIterator;
/// Repeated scalar fields are implemented around the runtime-specific
/// `RepeatedField` struct. `RepeatedField` stores an opaque pointer to the
/// runtime-specific representation of a repeated scalar (`upb_Array*` on upb,
@ -367,6 +368,14 @@ where
}
}
impl<'msg, T: ?Sized + ProxiedInRepeated> ExactSizeIterator for RepeatedIter<'msg, T> {
fn len(&self) -> usize {
self.view.len()
}
}
impl<'msg, T: ?Sized + ProxiedInRepeated> FusedIterator for RepeatedIter<'msg, T> {}
impl<'msg, T> iter::IntoIterator for RepeatedView<'msg, T>
where
T: ProxiedInRepeated + ?Sized + 'msg,

@ -21,6 +21,7 @@ macro_rules! generate_repeated_numeric_test {
let mut mutator = msg.[<repeated_ $field _mut >]();
mutator.push(1 as $t);
assert_that!(mutator.len(), eq(1));
assert_that!(mutator.iter().len(), eq(1));
assert_that!(mutator.get(0), some(eq(1 as $t)));
mutator.set(0, 2 as $t);
assert_that!(mutator.get(0), some(eq(2 as $t)));

Loading…
Cancel
Save