mc_network_io/
identifier.rs1use 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}