diff --git a/rust/flatbuffers/src/lib.rs b/rust/flatbuffers/src/lib.rs index 600d6d9c1..ed2bc173d 100644 --- a/rust/flatbuffers/src/lib.rs +++ b/rust/flatbuffers/src/lib.rs @@ -30,6 +30,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(all(nightly, not(feature = "std")), feature(error_in_core))] +#![cfg_attr(nightly, feature(trusted_len))] #[cfg(not(feature = "std"))] extern crate alloc; diff --git a/rust/flatbuffers/src/vector.rs b/rust/flatbuffers/src/vector.rs index 6c559b439..2078a76df 100644 --- a/rust/flatbuffers/src/vector.rs +++ b/rust/flatbuffers/src/vector.rs @@ -17,6 +17,8 @@ use core::cmp::Ordering; use core::fmt::{Debug, Formatter, Result}; use core::iter::{DoubleEndedIterator, ExactSizeIterator, FusedIterator}; +#[cfg(nightly)] +use core::iter::TrustedLen; use core::marker::PhantomData; use core::mem::{align_of, size_of}; use core::str::from_utf8_unchecked; @@ -293,6 +295,9 @@ impl<'a, T: 'a + Follow<'a>> ExactSizeIterator for VectorIter<'a, T> { } } +#[cfg(nightly)] +unsafe impl<'a, T: Follow<'a> + 'a> TrustedLen for VectorIter<'a, T> {} + impl<'a, T: 'a + Follow<'a>> FusedIterator for VectorIter<'a, T> {} impl<'a, T: Follow<'a> + 'a> IntoIterator for Vector<'a, T> {