rsa_msg_packets/initialize/
name.rs

1use anyhow::anyhow;
2use log::trace;
3
4use crate::{types::ByteMessage, util::modes::Modes};
5
6pub struct NameMsg {
7    pub name: String
8}
9
10impl ByteMessage for NameMsg {
11    fn serialize(&self) -> Vec<u8> {
12        return Modes::Name.get_send(&self.name.as_bytes().to_vec());
13    }
14
15    fn deserialize(data: &Vec<u8>) -> anyhow::Result<Self> {
16        let data = data.clone();
17        trace!("Parsing name...");
18
19        let name = String::from_utf8(data)?;
20
21        if name.len() > 20 || name.len() <= 3 {
22            trace!("Name is too long / too short {}", name.len());
23            return Err(anyhow!("Name packet is too short / too long."));
24        }
25
26        if name.to_lowercase() == "you" {
27            trace!("Name cannot be you ({})", name);
28            return Err(anyhow!("Name cannot be you"));
29        }
30
31        return Ok(NameMsg {
32            name
33        });
34    }
35}