mc_network_io/
identifier.rs

1use std::io::{
2    prelude::{Read, Write},
3    Result,
4};
5
6use super::{
7    encoding::{Decoder, Encoder},
8    var_string::{VarStringRead, VarStringWrite},
9};
10
11#[derive(derive_more::Deref)]
12pub struct Identifier(String);
13
14impl Decoder for Identifier {
15    fn decode_from_read<R: Read>(reader: &mut R) -> Result<Self> {
16        Ok(Identifier(reader.read_var_string::<32767>()?))
17    }
18}
19
20impl Encoder for Identifier {
21    fn encode_to_write<W: Write>(&self, writer: &mut W) -> Result<()> {
22        writer.write_var_string(&self.0)?;
23        Ok(())
24    }
25}
26
27pub trait ReadIdentifier {
28    fn read_identifier(&mut self) -> Result<Identifier>;
29}
30
31pub trait WriteIdentifier {
32    fn write_identifier(&mut self, value: Identifier) -> Result<()>;
33}
34
35impl<R: Read> ReadIdentifier for R {
36    fn read_identifier(&mut self) -> Result<Identifier> {
37        Ok(Identifier(self.read_var_string::<32767>()?))
38    }
39}