Struct stm32l4xx_hal::dma::FrameReader
source · [−]pub struct FrameReader<BUFFER, PAYLOAD, const N: usize> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static, { /* private fields */ }
Expand description
Frame reader “worker”, access and handling of frame reads is made through this structure.
Implementations
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C1>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C1>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C1>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C1>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C2>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C2>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C2>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C2>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C3>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C3>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C3>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C3>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C4>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C4>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C4>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C4>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C5>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C5>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C5>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C5>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C6>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C6>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C6>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C6>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C7>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C7>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C7>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C7>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C1>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C1>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C1>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C1>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C2>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C2>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C2>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C2>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C3>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C3>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C3>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C3>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C4>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C4>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C4>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C4>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C5>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C5>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C5>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C5>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C6>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C6>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C6>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C6>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C7>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C7>: TransferPayload,
impl<BUFFER, PAYLOAD, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, C7>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
RxDma<PAYLOAD, C7>: TransferPayload,
sourcepub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn transfer_complete_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the transfer complete interrupt of the corresponding DMA channel.
Returns the full buffer received by the USART.
sourcepub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn character_match_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the character match interrupt of the corresponding USART
Returns the buffer received by the USART, including the matching character.
sourcepub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
pub fn receiver_timeout_interrupt(&mut self, next_frame: BUFFER) -> BUFFER
This function should be called from the receiver timeout interrupt of the corresponding USART
Returns the buffer received by the USART.
sourceimpl<BUFFER, PAYLOAD, CHANNEL, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, CHANNEL>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
PAYLOAD: CharacterMatch,
impl<BUFFER, PAYLOAD, CHANNEL, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, CHANNEL>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
PAYLOAD: CharacterMatch,
sourcepub fn check_character_match(&mut self, clear: bool) -> bool
pub fn check_character_match(&mut self, clear: bool) -> bool
Checks to see if the peripheral has detected a character match and clears the flag
sourceimpl<BUFFER, PAYLOAD, CHANNEL, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, CHANNEL>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
PAYLOAD: ReceiverTimeout,
impl<BUFFER, PAYLOAD, CHANNEL, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, CHANNEL>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
PAYLOAD: ReceiverTimeout,
pub fn check_receiver_timeout(&mut self, clear: bool) -> bool
sourceimpl<BUFFER, PAYLOAD, CHANNEL, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, CHANNEL>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
impl<BUFFER, PAYLOAD, CHANNEL, const N: usize> FrameReader<BUFFER, RxDma<PAYLOAD, CHANNEL>, N> where
BUFFER: Sized + StableDeref<Target = DMAFrame<N>> + DerefMut + 'static,
pub fn check_operation_error<O, E>(&mut self) -> Result<O, E> where
PAYLOAD: OperationError<O, E>,
Auto Trait Implementations
impl<BUFFER, PAYLOAD, const N: usize> RefUnwindSafe for FrameReader<BUFFER, PAYLOAD, N> where
BUFFER: RefUnwindSafe,
PAYLOAD: RefUnwindSafe,
impl<BUFFER, PAYLOAD, const N: usize> Send for FrameReader<BUFFER, PAYLOAD, N> where
BUFFER: Send,
PAYLOAD: Send,
impl<BUFFER, PAYLOAD, const N: usize> Sync for FrameReader<BUFFER, PAYLOAD, N> where
BUFFER: Sync,
PAYLOAD: Sync,
impl<BUFFER, PAYLOAD, const N: usize> Unpin for FrameReader<BUFFER, PAYLOAD, N> where
BUFFER: Unpin,
PAYLOAD: Unpin,
impl<BUFFER, PAYLOAD, const N: usize> UnwindSafe for FrameReader<BUFFER, PAYLOAD, N> where
BUFFER: UnwindSafe,
PAYLOAD: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more