diff options
Diffstat (limited to 'src/server/cmd/commands/text/create.rs')
| -rw-r--r-- | src/server/cmd/commands/text/create.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/server/cmd/commands/text/create.rs b/src/server/cmd/commands/text/create.rs new file mode 100644 index 0000000..879f9bd --- /dev/null +++ b/src/server/cmd/commands/text/create.rs @@ -0,0 +1,31 @@ +// Copyleft 2021-2021 Whirlsplash +// SPDX-License-Identifier: GPL-3.0-only + +use bytes::{BufMut, BytesMut}; + +use crate::server::cmd::{commands::text::structure::Text, constants::TEXT}; + +pub fn create_text(text: Text) -> Vec<u8> { + let mut command = BytesMut::new(); + + // Header + command.put_u8(0x01); + command.put_u8(TEXT as u8); + + // Content + // The fourth and fifth elements are presumed to be interpreted as a short by + // the client, however, usernames aren't (?) allowed to be long enough that + // they reach a number high enough to be converted to a short. + command.put_u8(0x00); + command.put_u8(text.sender.len() as u8); + command.put_slice(text.sender.as_bytes()); + command.put_u8(text.content.len() as u8); + command.put_slice(text.content.as_bytes()); + + // Convert to vector and insert the length + let mut command_as_vec = command.to_vec(); + command_as_vec.insert(0, command.len() as u8 + 1); + + // Return bytes + command_as_vec +} |