mc-network-data-types 0.1.4

Minecraft network I/O data types
Documentation
use std::io::{
    prelude::{Read, Write},
    Result,
};

use super::{
    encoding::{Decoder, Encoder},
    var_string::{VarStringRead, VarStringWrite},
};

#[derive(derive_more::Deref)]
pub struct Identifier(String);

impl Decoder for Identifier {
    fn decode_from_read<R: Read>(reader: &mut R) -> Result<Self> {
        Ok(Identifier(reader.read_var_string::<32767>()?))
    }
}

impl Encoder for Identifier {
    fn encode_to_write<W: Write>(&self, writer: &mut W) -> Result<()> {
        writer.write_var_string(&self.0)?;
        Ok(())
    }
}

pub trait ReadIdentifier {
    fn read_identifier(&mut self) -> Result<Identifier>;
}

pub trait WriteIdentifier {
    fn write_identifier(&mut self, value: Identifier) -> Result<()>;
}

impl<R: Read> ReadIdentifier for R {
    fn read_identifier(&mut self) -> Result<Identifier> {
        Ok(Identifier(self.read_var_string::<32767>()?))
    }
}