diff --git a/util/src/zerocopy/zerocopy_slice_ext.rs b/util/src/zerocopy/zerocopy_slice_ext.rs index 3dd53932..25c1b668 100644 --- a/util/src/zerocopy/zerocopy_slice_ext.rs +++ b/util/src/zerocopy/zerocopy_slice_ext.rs @@ -1,7 +1,7 @@ //! Extension traits for parsing slices into [`zerocopy::Ref`] values using the //! [`RefMaker`] abstraction. -use zerocopy::{ByteSlice, ByteSliceMut, Ref}; +use zerocopy::{ByteSlice, ByteSliceMut, Immutable, KnownLayout, Ref, SplitByteSlice}; use super::RefMaker; @@ -52,7 +52,10 @@ pub trait ZerocopySliceExt: Sized + ByteSlice { /// assert_eq!(data_ref.0, 0x0201); /// assert_eq!(data_ref.1, 0x0403); /// ``` - fn zk_parse(self) -> anyhow::Result> { + fn zk_parse(self) -> anyhow::Result> + where + T: KnownLayout + Immutable, + { self.zk_ref_maker().parse() } @@ -80,7 +83,11 @@ pub trait ZerocopySliceExt: Sized + ByteSlice { /// let header_ref = bytes.0.zk_parse_prefix::
().unwrap(); /// assert_eq!(header_ref.0, 0xDDCCBBAA); /// ``` - fn zk_parse_prefix(self) -> anyhow::Result> { + fn zk_parse_prefix(self) -> anyhow::Result> + where + Self: SplitByteSlice, + T: KnownLayout + Immutable, + { self.zk_ref_maker().from_prefix()?.parse() } @@ -108,7 +115,11 @@ pub trait ZerocopySliceExt: Sized + ByteSlice { /// let header_ref = bytes.0.zk_parse_suffix::
().unwrap(); /// assert_eq!(header_ref.0, 0x30201000); /// ``` - fn zk_parse_suffix(self) -> anyhow::Result> { + fn zk_parse_suffix(self) -> anyhow::Result> + where + Self: SplitByteSlice, + T: KnownLayout + Immutable, + { self.zk_ref_maker().from_suffix()?.parse() } } @@ -143,7 +154,10 @@ pub trait ZerocopyMutSliceExt: ZerocopySliceExt + Sized + ByteSliceMut { /// assert_eq!(data_ref.0, [0,0,0,0]); /// assert_eq!(bytes.0, [0, 0, 0, 0]); /// ``` - fn zk_zeroized(self) -> anyhow::Result> { + fn zk_zeroized(self) -> anyhow::Result> + where + T: KnownLayout + Immutable, + { self.zk_ref_maker().make_zeroized() } @@ -171,7 +185,11 @@ pub trait ZerocopyMutSliceExt: ZerocopySliceExt + Sized + ByteSliceMut { /// assert_eq!(data_ref.0, [0,0,0,0]); /// assert_eq!(bytes.0, [0, 0, 0, 0, 0xFF, 0xFF]); /// ``` - fn zk_zeroized_from_prefix(self) -> anyhow::Result> { + fn zk_zeroized_from_prefix(self) -> anyhow::Result> + where + Self: SplitByteSlice, + T: KnownLayout + Immutable, + { self.zk_ref_maker().from_prefix()?.make_zeroized() } @@ -199,7 +217,11 @@ pub trait ZerocopyMutSliceExt: ZerocopySliceExt + Sized + ByteSliceMut { /// assert_eq!(data_ref.0, [0,0,0,0]); /// assert_eq!(bytes.0, [0xFF, 0xFF, 0, 0, 0, 0]); /// ``` - fn zk_zeroized_from_suffix(self) -> anyhow::Result> { + fn zk_zeroized_from_suffix(self) -> anyhow::Result> + where + Self: SplitByteSlice, + T: KnownLayout + Immutable, + { self.zk_ref_maker().from_suffix()?.make_zeroized() } }