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}