1use alloc::vec::Vec;
4use core::fmt::Debug;
5
6#[cfg(feature = "psp")]
7pub mod dns;
8pub mod io;
9
10pub trait SocketBuffer: Clone + Debug + Default {
14 fn new() -> Self
16 where
17 Self: Sized;
18
19 fn append_buffer(&mut self, buf: &[u8]);
24
25 fn shift_left_buffer(&mut self, amount: usize);
29
30 fn clear(&mut self) {
32 self.shift_left_buffer(self.len());
33 }
34
35 fn is_empty(&self) -> bool {
37 self.len() == 0
38 }
39
40 fn as_slice(&self) -> &[u8];
45
46 fn len(&self) -> usize;
48}
49
50impl SocketBuffer for Vec<u8> {
51 #[inline]
52 fn new() -> Self {
53 Vec::new()
54 }
55
56 #[inline]
57 fn append_buffer(&mut self, buf: &[u8]) {
58 self.append(&mut buf.to_vec());
59 }
60
61 fn shift_left_buffer(&mut self, amount: usize) {
62 if self.len() <= amount {
64 self.clear();
65 } else {
66 self.drain(..amount);
67 }
68 }
69
70 #[inline]
71 fn len(&self) -> usize {
72 self.len()
73 }
74
75 #[inline]
76 fn clear(&mut self) {
77 self.clear();
78 }
79
80 #[inline]
81 fn as_slice(&self) -> &[u8] {
82 self.as_slice()
83 }
84}