Struct DataDownload

Source
pub struct DataDownload<'s> { /* private fields */ }
Expand description

Data download helper

To success stream data over usb it needs to be sent in blocks that are multiple of the max endpoint size, otherwise the receiver may complain. It also should only send as much data as was indicate in the DATA command.

This helper ensures both invariants are met. To do this data needs to be sent by using DataDownload::extend_from_slice or DataDownload::get_mut_data, after sending the data DataDownload::finish should be called to validate and finalize.

Implementations§

Source§

impl DataDownload<'_>

Source

pub fn size(&self) -> u32

Total size of the data transfer

Source

pub fn left(&self) -> u32

Data left to be sent/queued

Source

pub async fn extend_from_slice( &mut self, data: &[u8], ) -> Result<(), DownloadError>

Extend the streaming from a slice

This will copy all provided data and send it out if enough is collected. The total amount of data being sent should not exceed the download size

Source

pub async fn get_mut_data( &mut self, max: usize, ) -> Result<&mut [u8], DownloadError>

This will provide a mutable reference to a u8 of at most max size. The returned slice should be completely filled with data to be downloaded to the device

The total amount of data should not exceed the download size

Source

pub async fn finish(self) -> Result<(), DownloadError>

Finish all pending transfer

This should only be called if all data has been queued up (matching the total size)

Auto Trait Implementations§

§

impl<'s> Freeze for DataDownload<'s>

§

impl<'s> !RefUnwindSafe for DataDownload<'s>

§

impl<'s> Send for DataDownload<'s>

§

impl<'s> Sync for DataDownload<'s>

§

impl<'s> Unpin for DataDownload<'s>

§

impl<'s> !UnwindSafe for DataDownload<'s>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more