Struct gaia_ccsds_c2a::ccsds::space_packet::PrimaryHeader
source · #[repr(C)]pub struct PrimaryHeader { /* private fields */ }
Implementations§
source§impl PrimaryHeader
impl PrimaryHeader
source§impl PrimaryHeader
impl PrimaryHeader
sourcepub const fn into_bytes(self) -> [u8; 6]
pub const fn into_bytes(self) -> [u8; 6]
sourcepub const fn from_bytes(bytes: [u8; 6]) -> Self
pub const fn from_bytes(bytes: [u8; 6]) -> Self
Converts the given bytes directly into the bitfield struct.
source§impl PrimaryHeader
impl PrimaryHeader
sourcepub fn version_number(&self) -> <B3 as Specifier>::InOut
pub fn version_number(&self) -> <B3 as Specifier>::InOut
Returns the value of version_number.
sourcepub fn version_number_or_err(
&self
) -> Result<<B3 as Specifier>::InOut, InvalidBitPattern<<B3 as Specifier>::Bytes>>
pub fn version_number_or_err( &self ) -> Result<<B3 as Specifier>::InOut, InvalidBitPattern<<B3 as Specifier>::Bytes>>
Returns the value of version_number.
#Errors
If the returned value contains an invalid bit pattern for version_number.
sourcepub fn with_version_number(self, new_val: <B3 as Specifier>::InOut) -> Self
pub fn with_version_number(self, new_val: <B3 as Specifier>::InOut) -> Self
Returns a copy of the bitfield with the value of version_number set to the given value.
#Panics
If the given value is out of bounds for version_number.
sourcepub fn with_version_number_checked(
self,
new_val: <B3 as Specifier>::InOut
) -> Result<Self, OutOfBounds>
pub fn with_version_number_checked( self, new_val: <B3 as Specifier>::InOut ) -> Result<Self, OutOfBounds>
Returns a copy of the bitfield with the value of version_number set to the given value.
#Errors
If the given value is out of bounds for version_number.
sourcepub fn set_version_number(&mut self, new_val: <B3 as Specifier>::InOut)
pub fn set_version_number(&mut self, new_val: <B3 as Specifier>::InOut)
Sets the value of version_number to the given value.
#Panics
If the given value is out of bounds for version_number.
sourcepub fn set_version_number_checked(
&mut self,
new_val: <B3 as Specifier>::InOut
) -> Result<(), OutOfBounds>
pub fn set_version_number_checked( &mut self, new_val: <B3 as Specifier>::InOut ) -> Result<(), OutOfBounds>
Sets the value of version_number to the given value.
#Errors
If the given value is out of bounds for version_number.
sourcepub fn packet_type(&self) -> <PacketType as Specifier>::InOut
pub fn packet_type(&self) -> <PacketType as Specifier>::InOut
Returns the value of packet_type.
sourcepub fn packet_type_or_err(
&self
) -> Result<<PacketType as Specifier>::InOut, InvalidBitPattern<<PacketType as Specifier>::Bytes>>
pub fn packet_type_or_err( &self ) -> Result<<PacketType as Specifier>::InOut, InvalidBitPattern<<PacketType as Specifier>::Bytes>>
Returns the value of packet_type.
#Errors
If the returned value contains an invalid bit pattern for packet_type.
sourcepub fn with_packet_type(self, new_val: <PacketType as Specifier>::InOut) -> Self
pub fn with_packet_type(self, new_val: <PacketType as Specifier>::InOut) -> Self
Returns a copy of the bitfield with the value of packet_type set to the given value.
#Panics
If the given value is out of bounds for packet_type.
sourcepub fn with_packet_type_checked(
self,
new_val: <PacketType as Specifier>::InOut
) -> Result<Self, OutOfBounds>
pub fn with_packet_type_checked( self, new_val: <PacketType as Specifier>::InOut ) -> Result<Self, OutOfBounds>
Returns a copy of the bitfield with the value of packet_type set to the given value.
#Errors
If the given value is out of bounds for packet_type.
sourcepub fn set_packet_type(&mut self, new_val: <PacketType as Specifier>::InOut)
pub fn set_packet_type(&mut self, new_val: <PacketType as Specifier>::InOut)
Sets the value of packet_type to the given value.
#Panics
If the given value is out of bounds for packet_type.
sourcepub fn set_packet_type_checked(
&mut self,
new_val: <PacketType as Specifier>::InOut
) -> Result<(), OutOfBounds>
pub fn set_packet_type_checked( &mut self, new_val: <PacketType as Specifier>::InOut ) -> Result<(), OutOfBounds>
Sets the value of packet_type to the given value.
#Errors
If the given value is out of bounds for packet_type.
sourcepub fn secondary_header_flag(&self) -> <bool as Specifier>::InOut
pub fn secondary_header_flag(&self) -> <bool as Specifier>::InOut
Returns the value of secondary_header_flag.
sourcepub fn secondary_header_flag_or_err(
&self
) -> Result<<bool as Specifier>::InOut, InvalidBitPattern<<bool as Specifier>::Bytes>>
pub fn secondary_header_flag_or_err( &self ) -> Result<<bool as Specifier>::InOut, InvalidBitPattern<<bool as Specifier>::Bytes>>
Returns the value of secondary_header_flag.
#Errors
If the returned value contains an invalid bit pattern for secondary_header_flag.
sourcepub fn with_secondary_header_flag(
self,
new_val: <bool as Specifier>::InOut
) -> Self
pub fn with_secondary_header_flag( self, new_val: <bool as Specifier>::InOut ) -> Self
Returns a copy of the bitfield with the value of secondary_header_flag set to the given value.
#Panics
If the given value is out of bounds for secondary_header_flag.
sourcepub fn with_secondary_header_flag_checked(
self,
new_val: <bool as Specifier>::InOut
) -> Result<Self, OutOfBounds>
pub fn with_secondary_header_flag_checked( self, new_val: <bool as Specifier>::InOut ) -> Result<Self, OutOfBounds>
Returns a copy of the bitfield with the value of secondary_header_flag set to the given value.
#Errors
If the given value is out of bounds for secondary_header_flag.
sourcepub fn set_secondary_header_flag(&mut self, new_val: <bool as Specifier>::InOut)
pub fn set_secondary_header_flag(&mut self, new_val: <bool as Specifier>::InOut)
Sets the value of secondary_header_flag to the given value.
#Panics
If the given value is out of bounds for secondary_header_flag.
sourcepub fn set_secondary_header_flag_checked(
&mut self,
new_val: <bool as Specifier>::InOut
) -> Result<(), OutOfBounds>
pub fn set_secondary_header_flag_checked( &mut self, new_val: <bool as Specifier>::InOut ) -> Result<(), OutOfBounds>
Sets the value of secondary_header_flag to the given value.
#Errors
If the given value is out of bounds for secondary_header_flag.
sourcepub fn apid_or_err(
&self
) -> Result<<B11 as Specifier>::InOut, InvalidBitPattern<<B11 as Specifier>::Bytes>>
pub fn apid_or_err( &self ) -> Result<<B11 as Specifier>::InOut, InvalidBitPattern<<B11 as Specifier>::Bytes>>
Returns the value of apid.
#Errors
If the returned value contains an invalid bit pattern for apid.
sourcepub fn with_apid(self, new_val: <B11 as Specifier>::InOut) -> Self
pub fn with_apid(self, new_val: <B11 as Specifier>::InOut) -> Self
Returns a copy of the bitfield with the value of apid set to the given value.
#Panics
If the given value is out of bounds for apid.
sourcepub fn with_apid_checked(
self,
new_val: <B11 as Specifier>::InOut
) -> Result<Self, OutOfBounds>
pub fn with_apid_checked( self, new_val: <B11 as Specifier>::InOut ) -> Result<Self, OutOfBounds>
Returns a copy of the bitfield with the value of apid set to the given value.
#Errors
If the given value is out of bounds for apid.
sourcepub fn set_apid(&mut self, new_val: <B11 as Specifier>::InOut)
pub fn set_apid(&mut self, new_val: <B11 as Specifier>::InOut)
Sets the value of apid to the given value.
#Panics
If the given value is out of bounds for apid.
sourcepub fn set_apid_checked(
&mut self,
new_val: <B11 as Specifier>::InOut
) -> Result<(), OutOfBounds>
pub fn set_apid_checked( &mut self, new_val: <B11 as Specifier>::InOut ) -> Result<(), OutOfBounds>
Sets the value of apid to the given value.
#Errors
If the given value is out of bounds for apid.
sourcepub fn sequence_flag(&self) -> <SequenceFlag as Specifier>::InOut
pub fn sequence_flag(&self) -> <SequenceFlag as Specifier>::InOut
Returns the value of sequence_flag.
sourcepub fn sequence_flag_or_err(
&self
) -> Result<<SequenceFlag as Specifier>::InOut, InvalidBitPattern<<SequenceFlag as Specifier>::Bytes>>
pub fn sequence_flag_or_err( &self ) -> Result<<SequenceFlag as Specifier>::InOut, InvalidBitPattern<<SequenceFlag as Specifier>::Bytes>>
Returns the value of sequence_flag.
#Errors
If the returned value contains an invalid bit pattern for sequence_flag.
sourcepub fn with_sequence_flag(
self,
new_val: <SequenceFlag as Specifier>::InOut
) -> Self
pub fn with_sequence_flag( self, new_val: <SequenceFlag as Specifier>::InOut ) -> Self
Returns a copy of the bitfield with the value of sequence_flag set to the given value.
#Panics
If the given value is out of bounds for sequence_flag.
sourcepub fn with_sequence_flag_checked(
self,
new_val: <SequenceFlag as Specifier>::InOut
) -> Result<Self, OutOfBounds>
pub fn with_sequence_flag_checked( self, new_val: <SequenceFlag as Specifier>::InOut ) -> Result<Self, OutOfBounds>
Returns a copy of the bitfield with the value of sequence_flag set to the given value.
#Errors
If the given value is out of bounds for sequence_flag.
sourcepub fn set_sequence_flag(&mut self, new_val: <SequenceFlag as Specifier>::InOut)
pub fn set_sequence_flag(&mut self, new_val: <SequenceFlag as Specifier>::InOut)
Sets the value of sequence_flag to the given value.
#Panics
If the given value is out of bounds for sequence_flag.
sourcepub fn set_sequence_flag_checked(
&mut self,
new_val: <SequenceFlag as Specifier>::InOut
) -> Result<(), OutOfBounds>
pub fn set_sequence_flag_checked( &mut self, new_val: <SequenceFlag as Specifier>::InOut ) -> Result<(), OutOfBounds>
Sets the value of sequence_flag to the given value.
#Errors
If the given value is out of bounds for sequence_flag.
sourcepub fn sequence_count(&self) -> <B14 as Specifier>::InOut
pub fn sequence_count(&self) -> <B14 as Specifier>::InOut
Returns the value of sequence_count.
sourcepub fn sequence_count_or_err(
&self
) -> Result<<B14 as Specifier>::InOut, InvalidBitPattern<<B14 as Specifier>::Bytes>>
pub fn sequence_count_or_err( &self ) -> Result<<B14 as Specifier>::InOut, InvalidBitPattern<<B14 as Specifier>::Bytes>>
Returns the value of sequence_count.
#Errors
If the returned value contains an invalid bit pattern for sequence_count.
sourcepub fn with_sequence_count(self, new_val: <B14 as Specifier>::InOut) -> Self
pub fn with_sequence_count(self, new_val: <B14 as Specifier>::InOut) -> Self
Returns a copy of the bitfield with the value of sequence_count set to the given value.
#Panics
If the given value is out of bounds for sequence_count.
sourcepub fn with_sequence_count_checked(
self,
new_val: <B14 as Specifier>::InOut
) -> Result<Self, OutOfBounds>
pub fn with_sequence_count_checked( self, new_val: <B14 as Specifier>::InOut ) -> Result<Self, OutOfBounds>
Returns a copy of the bitfield with the value of sequence_count set to the given value.
#Errors
If the given value is out of bounds for sequence_count.
sourcepub fn set_sequence_count(&mut self, new_val: <B14 as Specifier>::InOut)
pub fn set_sequence_count(&mut self, new_val: <B14 as Specifier>::InOut)
Sets the value of sequence_count to the given value.
#Panics
If the given value is out of bounds for sequence_count.
sourcepub fn set_sequence_count_checked(
&mut self,
new_val: <B14 as Specifier>::InOut
) -> Result<(), OutOfBounds>
pub fn set_sequence_count_checked( &mut self, new_val: <B14 as Specifier>::InOut ) -> Result<(), OutOfBounds>
Sets the value of sequence_count to the given value.
#Errors
If the given value is out of bounds for sequence_count.
sourcepub fn packet_data_length_raw(&self) -> <B16 as Specifier>::InOut
pub fn packet_data_length_raw(&self) -> <B16 as Specifier>::InOut
Returns the value of packet_data_length_raw.
sourcepub fn packet_data_length_raw_or_err(
&self
) -> Result<<B16 as Specifier>::InOut, InvalidBitPattern<<B16 as Specifier>::Bytes>>
pub fn packet_data_length_raw_or_err( &self ) -> Result<<B16 as Specifier>::InOut, InvalidBitPattern<<B16 as Specifier>::Bytes>>
Returns the value of packet_data_length_raw.
#Errors
If the returned value contains an invalid bit pattern for packet_data_length_raw.
sourcepub fn with_packet_data_length_raw(
self,
new_val: <B16 as Specifier>::InOut
) -> Self
pub fn with_packet_data_length_raw( self, new_val: <B16 as Specifier>::InOut ) -> Self
Returns a copy of the bitfield with the value of packet_data_length_raw set to the given value.
#Panics
If the given value is out of bounds for packet_data_length_raw.
sourcepub fn with_packet_data_length_raw_checked(
self,
new_val: <B16 as Specifier>::InOut
) -> Result<Self, OutOfBounds>
pub fn with_packet_data_length_raw_checked( self, new_val: <B16 as Specifier>::InOut ) -> Result<Self, OutOfBounds>
Returns a copy of the bitfield with the value of packet_data_length_raw set to the given value.
#Errors
If the given value is out of bounds for packet_data_length_raw.
sourcepub fn set_packet_data_length_raw(&mut self, new_val: <B16 as Specifier>::InOut)
pub fn set_packet_data_length_raw(&mut self, new_val: <B16 as Specifier>::InOut)
Sets the value of packet_data_length_raw to the given value.
#Panics
If the given value is out of bounds for packet_data_length_raw.
sourcepub fn set_packet_data_length_raw_checked(
&mut self,
new_val: <B16 as Specifier>::InOut
) -> Result<(), OutOfBounds>
pub fn set_packet_data_length_raw_checked( &mut self, new_val: <B16 as Specifier>::InOut ) -> Result<(), OutOfBounds>
Sets the value of packet_data_length_raw to the given value.
#Errors
If the given value is out of bounds for packet_data_length_raw.
source§impl PrimaryHeader
impl PrimaryHeader
pub const SIZE: usize = 6usize
pub fn packet_data_length_in_bytes(&self) -> usize
pub fn set_packet_data_length_in_bytes( &mut self, packet_data_length_in_bytes: usize )
pub fn is_idle_packet(&self) -> bool
Trait Implementations§
source§impl AsBytes for PrimaryHeader
impl AsBytes for PrimaryHeader
§fn as_bytes_mut(&mut self) -> &mut [u8] ⓘwhere
Self: FromBytes,
fn as_bytes_mut(&mut self) -> &mut [u8] ⓘwhere
Self: FromBytes,
§fn write_to_prefix<B>(&self, bytes: B) -> Option<()>where
B: ByteSliceMut,
fn write_to_prefix<B>(&self, bytes: B) -> Option<()>where
B: ByteSliceMut,
§fn write_to_suffix<B>(&self, bytes: B) -> Option<()>where
B: ByteSliceMut,
fn write_to_suffix<B>(&self, bytes: B) -> Option<()>where
B: ByteSliceMut,
source§impl Debug for PrimaryHeader
impl Debug for PrimaryHeader
source§impl Default for PrimaryHeader
impl Default for PrimaryHeader
source§fn default() -> PrimaryHeader
fn default() -> PrimaryHeader
source§impl FromBytes for PrimaryHeader
impl FromBytes for PrimaryHeader
§fn read_from_prefix<B>(bytes: B) -> Option<Self>where
B: ByteSlice,
Self: Sized,
fn read_from_prefix<B>(bytes: B) -> Option<Self>where
B: ByteSlice,
Self: Sized,
§fn read_from_suffix<B>(bytes: B) -> Option<Self>where
B: ByteSlice,
Self: Sized,
fn read_from_suffix<B>(bytes: B) -> Option<Self>where
B: ByteSlice,
Self: Sized,
§fn new_zeroed() -> Selfwhere
Self: Sized,
fn new_zeroed() -> Selfwhere
Self: Sized,
Self
from zeroed bytes.impl Unaligned for PrimaryHeader
Auto Trait Implementations§
impl Freeze for PrimaryHeader
impl RefUnwindSafe for PrimaryHeader
impl Send for PrimaryHeader
impl Sync for PrimaryHeader
impl Unpin for PrimaryHeader
impl UnwindSafe for PrimaryHeader
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.