Skip to main content

nurtex_protocol/types/
server_link.rs

1use nurtex_codec::Buffer;
2use nurtex_codec::types::variable::VarI32;
3
4/// Ссылка сервера
5#[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}