use std::collections::VecDeque; use crate::varint::varint_read; pub struct Handshake { pub protocol_version: i32, pub server_address: String, pub server_port: u16, pub intent: i32 } impl Handshake { pub fn parse(mut packet: &mut VecDeque) -> Result { let protocol_version = varint_read(&mut packet)?; let str_len = varint_read(&mut packet)? as usize; let server_address : String = String::from_utf8(packet.drain(..str_len).collect::>()).expect("Invalid UTF-8"); let bytes: [u8; 2] = [packet[0], packet[1]]; let server_port : u16 = u16::from_be_bytes(bytes); packet.drain(..2); let intent : i32 = varint_read(&mut packet)?; Ok(Self { protocol_version, server_address, server_port, intent }) } }