karyon_net/codec/
buffer.rs1use bytes::{Buf, BytesMut};
2
3pub type ByteBuffer = Buffer;
4
5#[derive(Debug, Default)]
6pub struct Buffer {
7 inner: BytesMut,
8}
9
10impl Buffer {
11 pub fn new() -> Self {
13 Self {
14 inner: BytesMut::new(),
15 }
16 }
17
18 pub fn len(&self) -> usize {
20 self.inner.len()
21 }
22
23 pub fn resize(&mut self, new_size: usize) {
25 self.inner.resize(new_size, 0u8);
26 }
27
28 pub fn extend_from_slice(&mut self, bytes: &[u8]) {
30 self.inner.extend_from_slice(bytes);
31 }
32
33 pub fn advance(&mut self, cnt: usize) {
36 self.inner.advance(cnt);
37 }
38
39 pub fn is_empty(&self) -> bool {
41 self.inner.is_empty()
42 }
43}
44
45impl AsMut<[u8]> for Buffer {
46 fn as_mut(&mut self) -> &mut [u8] {
47 self.inner.as_mut()
48 }
49}
50
51impl AsRef<[u8]> for Buffer {
52 fn as_ref(&self) -> &[u8] {
53 self.inner.as_ref()
54 }
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn test_buffer() {
63 let mut buf = Buffer::new();
64 assert_eq!(&[] as &[u8], buf.as_ref());
65 assert_eq!(0, buf.len());
66 assert!(buf.is_empty());
67
68 buf.extend_from_slice(&[1, 2, 3, 4, 5]);
69 assert_eq!(&[1, 2, 3, 4, 5], buf.as_ref());
70 assert_eq!(5, buf.len());
71 assert!(!buf.is_empty());
72
73 buf.advance(2);
74 assert_eq!(&[3, 4, 5], buf.as_ref());
75 assert_eq!(3, buf.len());
76 assert!(!buf.is_empty());
77
78 buf.extend_from_slice(&[6, 7, 8]);
79 assert_eq!(&[3, 4, 5, 6, 7, 8], buf.as_ref());
80 assert_eq!(6, buf.len());
81 assert!(!buf.is_empty());
82
83 buf.advance(4);
84 assert_eq!(&[7, 8], buf.as_ref());
85 assert_eq!(2, buf.len());
86 assert!(!buf.is_empty());
87
88 buf.advance(2);
89 assert_eq!(&[] as &[u8], buf.as_ref());
90 assert_eq!(0, buf.len());
91 assert!(buf.is_empty());
92 }
93}