From a8cf6007136779c121d90888ec976108baefa8b6 Mon Sep 17 00:00:00 2001
From: HampusM <hampus@hampusmat.com>
Date: Sun, 30 Mar 2025 23:12:47 +0200
Subject: feat: add FieldSlice get_item fn

---
 src/lib.rs | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

(limited to 'src')

diff --git a/src/lib.rs b/src/lib.rs
index 6282a8b..6f0c95f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -731,6 +731,24 @@ impl FieldSlice<'_>
         unsafe { self.bytes.cast::<Item>() }
     }
 
+    pub fn get_item(&self, item_index: usize) -> Option<Field<'_>>
+    {
+        let start_off = self.get_item_offset(item_index)?;
+
+        if item_index >= self.len {
+            return None;
+        }
+
+        let field_bytes = self
+            .bytes
+            .get(start_off..start_off + self.field_metadata.size)?;
+
+        Some(Field {
+            bytes: field_bytes,
+            field_metadata: self.field_metadata,
+        })
+    }
+
     pub fn iter(&self) -> FieldSliceIter<'_>
     {
         FieldSliceIter {
@@ -740,6 +758,15 @@ impl FieldSlice<'_>
             field_metadata: self.field_metadata,
         }
     }
+
+    fn get_item_offset(&self, item_index: usize) -> Option<usize>
+    {
+        if item_index >= self.len {
+            return None;
+        }
+
+        Some(item_index * self.field_metadata.size)
+    }
 }
 
 #[derive(Debug)]
-- 
cgit v1.2.3-18-g5258