From 6c1870c9405a80cb9f08e7fbb2db0b504522e1b2 Mon Sep 17 00:00:00 2001 From: Lizzy Fleckenstein Date: Tue, 14 Feb 2023 16:17:20 +0100 Subject: Implement NodeMeta and add Inventory stub --- src/to_clt/inv.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/to_clt/inv.rs (limited to 'src/to_clt/inv.rs') diff --git a/src/to_clt/inv.rs b/src/to_clt/inv.rs new file mode 100644 index 0000000..2ada0a1 --- /dev/null +++ b/src/to_clt/inv.rs @@ -0,0 +1,37 @@ +use super::*; +use mt_ser::{DeserializeError, SerializeError}; +use std::io::{Read, Write}; + +#[mt_derive(to = "clt", custom)] +pub struct Inventory; // TODO + +#[cfg(feature = "server")] +impl MtSerialize for Inventory { + fn mt_serialize(&self, writer: &mut impl Write) -> Result<(), SerializeError> { + "EndInventory\n".mt_serialize::<()>(writer) + } +} + +fn read_line(reader: &mut impl Read) -> Result { + let utf8 = mt_ser::mt_deserialize_seq::<(), u8>(reader)? + .map_while(|x| match x { + Ok(0x0A) => None, + x => Some(x), + }) + .try_collect::>()?; + + String::from_utf8(utf8) + .map_err(|e| DeserializeError::Other(format!("Invalid UTF-8: {e}").into())) +} + +#[cfg(feature = "client")] +impl MtDeserialize for Inventory { + fn mt_deserialize(reader: &mut impl Read) -> Result { + loop { + match read_line(reader)?.as_str() { + "EndInventory" => return Ok(Self), + _ => {} + } + } + } +} -- cgit v1.2.3