embedded_io_async/impls/
slice_mut.rs1use core::mem;
2use embedded_io::SliceWriteError;
3
4use crate::Write;
5
6impl Write for &mut [u8] {
16 #[inline]
17 async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
18 let amt = core::cmp::min(buf.len(), self.len());
19 if !buf.is_empty() && amt == 0 {
20 return Err(SliceWriteError::Full);
21 }
22 let (a, b) = mem::take(self).split_at_mut(amt);
23 a.copy_from_slice(&buf[..amt]);
24 *self = b;
25 Ok(amt)
26 }
27
28 #[inline]
29 async fn flush(&mut self) -> Result<(), Self::Error> {
30 Ok(())
31 }
32
33 #[inline]
34 async fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error> {
35 if self.len() < buf.len() {
36 return Err(SliceWriteError::Full);
37 }
38 self.write(buf).await?;
39 Ok(())
40 }
41}