ioctl: implement AsRef<> and Deref<> for PlaneMappings
This is more elegant than having our own methods.
diff --git a/examples/vicodec_test/device_api.rs b/examples/vicodec_test/device_api.rs
index 6d4ba5d..9dadffd 100644
--- a/examples/vicodec_test/device_api.rs
+++ b/examples/vicodec_test/device_api.rs
@@ -207,7 +207,7 @@
let cap_mapping = capture_queue
.map_plane(cap_index, 0)
.expect("Failed to map capture buffer");
- save_output(&cap_mapping.as_slice()[0..bytes_used]);
+ save_output(&cap_mapping.as_ref()[0..bytes_used]);
cpt = cpt.wrapping_add(1);
}
diff --git a/examples/vicodec_test/ioctl_api.rs b/examples/vicodec_test/ioctl_api.rs
index 9b45ec3..116212f 100644
--- a/examples/vicodec_test/ioctl_api.rs
+++ b/examples/vicodec_test/ioctl_api.rs
@@ -214,7 +214,7 @@
);
io::stdout().flush().unwrap();
- save_output(&capture_mappings[cap_dqbuf.index as usize].as_slice()[0..bytes_used]);
+ save_output(&capture_mappings[cap_dqbuf.index as usize].as_ref()[0..bytes_used]);
cpt = cpt.wrapping_add(1);
}
diff --git a/src/ioctl/mmap.rs b/src/ioctl/mmap.rs
index a3d5429..cc5d6b5 100644
--- a/src/ioctl/mmap.rs
+++ b/src/ioctl/mmap.rs
@@ -1,7 +1,7 @@
use crate::Result;
use std::os::unix::io::AsRawFd;
use std::{
- ops::{Index, IndexMut},
+ ops::{Deref, Index, IndexMut},
slice,
};
@@ -14,16 +14,17 @@
pub data: &'a mut [u8],
}
-impl<'a> PlaneMapping<'a> {
- pub fn len(&self) -> usize {
- self.data.len()
+impl<'a> AsRef<[u8]> for PlaneMapping<'a> {
+ fn as_ref(&self) -> &[u8] {
+ self.data
}
+}
- pub fn is_empty(&self) -> bool {
- self.len() == 0
- }
+/// To provide len() and is_empty().
+impl<'a> Deref for PlaneMapping<'a> {
+ type Target = [u8];
- pub fn as_slice(&'a self) -> &'a [u8] {
+ fn deref(&self) -> &Self::Target {
self.data
}
}