g_rust/misc/
hostinfo.rs

1use std::collections::HashMap;
2use crate::protocol::hpacket::HPacket;
3use crate::protocol::vars::packetvariable::PacketVariable;
4
5#[derive(Debug, Clone)]
6pub struct HostInfo {
7    pub packet_logger: String,
8    pub version: String,
9    pub attributes: HashMap<String, String>
10}
11
12impl PacketVariable for HostInfo {
13    fn from_packet(bytes: Vec<u8>) -> (Self, usize) where Self: Sized {
14        let mut packet = HPacket::from_header_id_and_bytes(0, bytes);
15        let (packet_logger, version) = packet.read();
16        let c: i32 = packet.read();
17        let mut attributes = HashMap::new();
18        for _ in 0..c {
19            attributes.insert(packet.read(), packet.read());
20        }
21
22        (HostInfo {
23            packet_logger,
24            version,
25            attributes
26        }, packet.read_index - 6)
27    }
28
29    fn to_packet(&self) -> Vec<u8> {
30        let mut packet = HPacket::from_header_id(0);
31        packet.append((self.packet_logger.clone(), self.version.clone(), self.attributes.len() as i32));
32        for (key, value) in self.attributes.iter() {
33            packet.append((key.to_string(), value.to_string()));
34        }
35
36        packet.get_bytes()[6..].to_vec()
37    }
38}