kojacoord_protocol/versions/v1_20_4/handshake/
mod.rs1use bytes::{Bytes, BytesMut};
2
3use crate::codec::{Decode, Encode, PacketId};
4use crate::error::ProtocolError;
5use crate::types::VarInt;
6
7#[derive(Debug, Clone, PartialEq)]
8pub struct ServerboundHandshake {
9 pub protocol_version: VarInt,
10
11 pub server_address: String,
12
13 pub server_port: u16,
14
15 pub next_state: VarInt,
16}
17
18impl PacketId for ServerboundHandshake {
19 fn packet_id(_ver: u32) -> u8 {
20 0x00
21 }
22}
23
24impl Encode for ServerboundHandshake {
25 fn encode(&self, dst: &mut BytesMut) -> Result<(), ProtocolError> {
26 self.protocol_version.encode(dst)?;
27 self.server_address.encode(dst)?;
28 self.server_port.encode(dst)?;
29 self.next_state.encode(dst)
30 }
31}
32
33impl Decode for ServerboundHandshake {
34 fn decode(src: &mut Bytes) -> Result<Self, ProtocolError> {
35 let protocol_version = VarInt::decode(src)?;
36 let server_address = String::decode(src)?;
37 let server_port = u16::decode(src)?;
38 let next_state = VarInt::decode(src)?;
39 Ok(Self {
40 protocol_version,
41 server_address,
42 server_port,
43 next_state,
44 })
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn roundtrip() {
54 let p = ServerboundHandshake {
55 protocol_version: VarInt(765),
56 server_address: "127.0.0.1".to_string(),
57 server_port: 25565,
58 next_state: VarInt(2),
59 };
60 let mut buf = BytesMut::new();
61 p.encode(&mut buf).unwrap();
62 let mut b = buf.freeze();
63 assert_eq!(ServerboundHandshake::decode(&mut b).unwrap(), p);
64 }
65}