drogue_http_client/
sink.rs1use core::fmt::Write;
2use heapless::{ArrayLength, Vec};
3
4pub trait Sink {
6 fn send(&mut self, data: &[u8]) -> Result<usize, ()>;
7}
8
9impl<N> Sink for Vec<u8, N>
11where
12 N: ArrayLength<u8>,
13{
14 fn send(&mut self, data: &[u8]) -> Result<usize, ()> {
15 self.extend_from_slice(data).map_err(|_| ())?;
16
17 Ok(data.len())
18 }
19}
20
21struct SinkWrapper<'a>(&'a mut dyn Sink);
22
23impl<'a> Write for SinkWrapper<'a> {
24 fn write_str(&mut self, s: &str) -> Result<(), core::fmt::Error> {
25 let buffer = s.as_bytes();
26 let mut pos = 0usize;
27
28 while pos < buffer.len() {
29 match self.0.send(&buffer[pos..]) {
30 Ok(len) => pos += len,
31 Err(_) => return Err(core::fmt::Error),
32 }
33 }
34
35 Ok(())
36 }
37}