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