aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoey Sacchini <joey@sacchini.net>2020-10-20 10:46:53 -0400
committerJoey Sacchini <joey@sacchini.net>2020-10-20 10:46:53 -0400
commit792f301ceae027bf90317b8aff9f1f59294d95bc (patch)
treeda3e74cf146f731c7b27ea7faa7fabc11e125bd8 /src
parentfa8e407ddf5089ea78c1922886ad1563fd7c1b0e (diff)
downloadmcproto-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.rs44
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,