Skip to main content

nurtex_protocol/types/
server_link.rs

1use 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}