pub struct Ref<'a, T: ?Sized> { /* private fields */ }Implementations§
Source§impl<'a> Ref<'a, [u8]>
impl<'a> Ref<'a, [u8]>
Sourcepub unsafe fn project<U: ?Sized>(self, ptr: *const U) -> Ref<'a, U>
pub unsafe fn project<U: ?Sized>(self, ptr: *const U) -> Ref<'a, U>
Project a byte borrow into another typed view over the same
underlying bytes. The new guard owns the same release mechanics
. when the returned Ref<U> drops, the underlying account
borrow is released exactly as if the original byte borrow had
dropped.
§Safety
ptr must point inside the byte slice that this Ref<[u8]>
guards (offset bounds checked by the caller), the pointee must
be valid U for any bit pattern (U: Pod-style), and ptr
must satisfy U’s alignment requirements. Hopper’s typed access
APIs enforce this by requiring alignment-1 wire/pod types. The
returned Ref<U> inherits the source guard’s lifetime, so the
account stays read-borrowed for as long as the typed view lives.
Sourcepub fn slice_from(self, offset: usize) -> Ref<'a, [u8]>
pub fn slice_from(self, offset: usize) -> Ref<'a, [u8]>
Narrow a shared byte-slice borrow to a tail starting at offset.
Sourcepub fn slice(
self,
offset: usize,
len: usize,
) -> Result<Ref<'a, [u8]>, ProgramError>
pub fn slice( self, offset: usize, len: usize, ) -> Result<Ref<'a, [u8]>, ProgramError>
Narrow a shared byte-slice borrow to a checked sub-slice.