diff options
author | Joey Sacchini <joey@sacchini.net> | 2020-10-20 10:46:53 -0400 |
---|---|---|
committer | Joey Sacchini <joey@sacchini.net> | 2020-10-20 10:46:53 -0400 |
commit | 792f301ceae027bf90317b8aff9f1f59294d95bc (patch) | |
tree | da3e74cf146f731c7b27ea7faa7fabc11e125bd8 /src | |
parent | fa8e407ddf5089ea78c1922886ad1563fd7c1b0e (diff) | |
download | mcproto-rs-792f301ceae027bf90317b8aff9f1f59294d95bc.tar.gz mcproto-rs-792f301ceae027bf90317b8aff9f1f59294d95bc.tar.bz2 mcproto-rs-792f301ceae027bf90317b8aff9f1f59294d95bc.zip |
iterator for entity metadata
Diffstat (limited to 'src')
-rw-r--r-- | src/v1_15_2.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/v1_15_2.rs b/src/v1_15_2.rs index ec03dd4..a78cd17 100644 --- a/src/v1_15_2.rs +++ b/src/v1_15_2.rs @@ -3012,6 +3012,20 @@ impl EntityMetadata { }) } + pub fn remove(&mut self, index: u8) -> bool { + for i in 0..self.fields.len() { + let field = self.fields + .get(i) + .expect("iterating through this vec, definitely have this index"); + if field.index == index { + self.fields.remove(i); + return true; + } + } + + false + } + pub fn get(&self, index: u8) -> Option<&EntityMetadataFieldData> { for field in &self.fields { if field.index == index { @@ -3023,6 +3037,36 @@ impl EntityMetadata { } } +impl<'a> core::iter::IntoIterator for &'a EntityMetadata { + type Item = (u8, &'a EntityMetadataFieldData); + type IntoIter = FieldIter<'a>; + + fn into_iter(self) -> Self::IntoIter { + FieldIter { + data: self, + at: 0, + } + } +} + +pub struct FieldIter<'a> { + data: &'a EntityMetadata, + at: usize +} + +impl<'a> core::iter::Iterator for FieldIter<'a> { + type Item = (u8, &'a EntityMetadataFieldData); + + fn next(&mut self) -> Option<Self::Item> { + self.data.fields.get(self.at).map(move |field| (field.index, &field.data)) + } + + fn size_hint(&self) -> (usize, Option<usize>) { + let len = self.data.fields.len(); + (len, Some(len)) + } +} + #[derive(Clone, Debug, PartialEq)] pub struct EntityMetadataField { pub index: u8, |