minecraft-net 0.2.0

A library allowing easier communication via the minecraft protocol
Documentation
use crate::fields::{encode_bool, encode_string, encode_var_int};
use crate::{Field, PacketReader, Result};
use minecraft_net_proc::Packet;
use crate::fields::types::TextComponent;

#[derive(Debug, Clone)]
pub enum LinkLabel {
    Builtin(i32),
    Custom(TextComponent),
}
#[derive(Debug, Clone)]
pub struct Link {
    pub is_builtin: bool,
    pub label: LinkLabel,
    pub url: String,
}
impl Link {
    pub fn new(label: LinkLabel, url: String) -> Self {
        Self {
            is_builtin: match label {
                LinkLabel::Builtin(_) => true,
                LinkLabel::Custom(_) => false
            },
            label,
            url,
        }
    }
}
impl Field for Link {
    fn to_bytes(&self) -> Vec<u8> {
        let mut res = encode_bool(self.is_builtin);
        res.append(&mut match &self.label {
            LinkLabel::Builtin(v) => encode_var_int(v.clone()),
            LinkLabel::Custom(s) => s.to_bytes(),
        });
        res.append(&mut encode_string(self.url.clone()));
        res
    }
    fn from_reader(reader: &mut PacketReader) -> Result<Self> {
        let is_builtin = reader.read_bool()?;
        if is_builtin {
            Ok(Self {
                is_builtin,
                label: LinkLabel::Builtin(reader.read_var_int()?),
                url: reader.read_string()?,
            })
        } else {
            Ok(Self {
                is_builtin,
                label: LinkLabel::Custom(reader.read()?),
                url: reader.read_string()?,
            })
        }
    }
}
Packet!(ServerLinks, 0x10, {
    links: PrefixedArray<Link>,
});