nurtex_protocol/types/
server_link.rs1use nurtex_codec::{Buffer, VarInt};
2
3#[derive(Clone, Debug, PartialEq)]
4pub struct ServerLink {
5 pub label: ServerLinkLabel,
6 pub url: String,
7}
8
9#[derive(Clone, Debug, PartialEq)]
10pub enum ServerLinkLabel {
11 BuiltIn(i32),
12 Custom(String),
13}
14
15impl Buffer for ServerLink {
16 fn read_buf(buffer: &mut std::io::Cursor<&[u8]>) -> Option<Self> {
17 Some(Self {
18 label: {
19 let is_built_in = bool::read_buf(buffer)?;
20
21 if is_built_in {
22 ServerLinkLabel::BuiltIn(i32::read_varint(buffer)?)
23 } else {
24 ServerLinkLabel::Custom(String::read_buf(buffer)?)
25 }
26 },
27 url: String::read_buf(buffer)?,
28 })
29 }
30
31 fn write_buf(&self, buffer: &mut impl std::io::Write) -> std::io::Result<()> {
32 match &self.label {
33 ServerLinkLabel::BuiltIn(id) => {
34 true.write_buf(buffer)?;
35 id.write_varint(buffer)?;
36 }
37 ServerLinkLabel::Custom(text) => {
38 false.write_buf(buffer)?;
39 text.write_buf(buffer)?;
40 }
41 }
42
43 self.url.write_buf(buffer)?;
44
45 Ok(())
46 }
47}