From 6bf261e243b11b376a0cbfbe9ab6f9d6cb398aed Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 26 Apr 2021 13:26:53 +0000 Subject: etc: Remove legacy server module --- src/server_dev/parser.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/server_dev/parser.rs (limited to 'src/server_dev/parser.rs') diff --git a/src/server_dev/parser.rs b/src/server_dev/parser.rs new file mode 100644 index 0000000..f856650 --- /dev/null +++ b/src/server_dev/parser.rs @@ -0,0 +1,35 @@ +use bytes::BytesMut; + +/// Read all commands from the given buffer. +/// +/// # Process +/// 1. Get a command from `buffer` based on first byte. +/// 2. Push command to `commands`. +/// 3. Remove command from `buffer`. +/// 4. Iterate and do this for all commands within `buffer`. +pub fn get_commands_from_buffer(mut buffer: BytesMut) -> Vec { + let mut commands: Vec = Vec::new(); + trace!("initial buffer: {:?}, length: {}", buffer, buffer.len()); + + let data_length = buffer.get(0).unwrap().to_owned() as usize; + if buffer.len() > data_length { + loop { + trace!("loop: {:?}, length: {}", buffer, buffer.len()); + let command_length = buffer.get(0).unwrap().to_owned() as usize; + commands.push(BytesMut::from(buffer.get(0..command_length).unwrap())); + + // Remove command from buffer + buffer = buffer.split_off(command_length); + + // Check if any more commands are present + if buffer.is_empty() { + break; + } + } + } else { + // There will always be at least one command, push it. + commands.push(BytesMut::from(buffer.get(0..data_length).unwrap())); + } + + commands // Return command (s) +} -- cgit v1.2.3