1#[derive(Debug)]
5pub struct BufferSet {
6 pub initial_handshake: Vec<u8>,
8
9 pub read_buffer: Vec<u8>,
12
13 pub write_buffer: Vec<u8>,
19
20 pub column_definition_buffer: Vec<u8>,
23}
24
25impl BufferSet {
26 pub fn new() -> Self {
28 Self {
29 initial_handshake: Vec::new(),
30 read_buffer: Vec::new(),
31 write_buffer: vec![0; 4],
32 column_definition_buffer: Vec::new(),
33 }
34 }
35
36 pub fn with_initial_handshake(initial_handshake: Vec<u8>) -> Self {
38 Self {
39 initial_handshake,
40 read_buffer: Vec::new(),
41 write_buffer: vec![0; 4],
42 column_definition_buffer: Vec::new(),
43 }
44 }
45
46 #[inline]
48 pub fn new_write_buffer(&mut self) -> &mut Vec<u8> {
49 self.write_buffer.clear();
50 self.write_buffer.extend_from_slice(&[0_u8; 4]);
51 &mut self.write_buffer
52 }
53
54 #[inline]
56 pub fn write_buffer_mut(&mut self) -> &mut Vec<u8> {
57 &mut self.write_buffer
58 }
59
60 #[inline]
62 pub fn write_buffer(&self) -> &[u8] {
63 &self.write_buffer
64 }
65
66 #[inline]
68 pub fn payload_len(&self) -> usize {
69 self.write_buffer.len().saturating_sub(4)
70 }
71}
72
73impl Default for BufferSet {
74 fn default() -> Self {
75 Self::new()
76 }
77}
78
79#[cfg(test)]
80mod tests {
81 use super::*;
82
83 #[test]
84 fn test_buffer_set_new() {
85 let buffers = BufferSet::new();
86 assert!(buffers.initial_handshake.is_empty());
87 assert!(buffers.read_buffer.is_empty());
88 assert_eq!(buffers.write_buffer().len(), 4); }
90
91 #[test]
92 fn test_buffer_set_default() {
93 let buffers = BufferSet::default();
94 assert!(buffers.initial_handshake.is_empty());
95 }
96
97 #[test]
98 fn test_buffer_set_with_initial_handshake() {
99 let handshake = vec![0x0a, 0x35, 0x2e, 0x37];
100 let buffers = BufferSet::with_initial_handshake(handshake.clone());
101 assert_eq!(buffers.initial_handshake, handshake);
102 assert!(buffers.read_buffer.is_empty());
103 }
104
105 #[test]
106 fn test_new_write_buffer() {
107 let mut buffers = BufferSet::new();
108 let buf = buffers.new_write_buffer();
109 assert_eq!(buf.len(), 4);
111 assert_eq!(buffers.payload_len(), 0);
112 }
113
114 #[test]
115 fn test_write_buffer_mut() {
116 let mut buffers = BufferSet::new();
117 buffers.new_write_buffer().extend_from_slice(b"SELECT 1");
118 assert_eq!(buffers.write_buffer().len(), 12);
120 assert_eq!(buffers.payload_len(), 8);
121 }
122
123 #[test]
124 fn test_write_buffer() {
125 let mut buffers = BufferSet::new();
126 buffers.new_write_buffer().extend_from_slice(b"test");
127 let packet = buffers.write_buffer();
128 assert_eq!(packet.len(), 8); assert_eq!(&packet[4..], b"test");
130 }
131
132 #[test]
133 fn test_buffer_reuse() {
134 let mut buffers = BufferSet::new();
135
136 buffers.read_buffer.extend_from_slice(b"test data");
138 buffers.new_write_buffer().extend_from_slice(b"query");
139
140 assert_eq!(buffers.read_buffer.len(), 9);
141 assert_eq!(buffers.payload_len(), 5);
142
143 buffers.read_buffer.clear();
145 buffers.new_write_buffer();
146
147 assert_eq!(buffers.read_buffer.len(), 0);
148 assert_eq!(buffers.payload_len(), 0);
149
150 assert!(buffers.read_buffer.capacity() >= 9);
152 }
153}