diff options
Diffstat (limited to 'shared/src/helper.rs')
-rw-r--r-- | shared/src/helper.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/shared/src/helper.rs b/shared/src/helper.rs index 14fb2bd..3ae7c37 100644 --- a/shared/src/helper.rs +++ b/shared/src/helper.rs @@ -14,7 +14,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ -use crate::packets::{Data, Object, Resource}; +use crate::packets::{Data, Message, Object, Resource}; use anyhow::Result; use glam::{Affine3A, Vec2, Vec3, Vec3A}; use std::{ @@ -304,6 +304,21 @@ impl ReadWrite for Data { Ok(Self(buf)) } } +impl ReadWrite for Message { + fn write(&self, w: &mut dyn Write) -> Result<()> { + w.write_all(&(self.0.len() as u32).to_be_bytes())?; + w.write_all(&self.0.as_bytes())?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut size = [0; { size_of::<u32>() }]; + r.read_exact(&mut size)?; + let size = u32::from_be_bytes(size); + let mut buf = vec![0; size as usize]; + r.read_exact(&mut buf)?; + Ok(Self(String::from_utf8_lossy_owned(buf))) + } +} impl<T> ReadWrite for Resource<T> { fn write(&self, w: &mut dyn Write) -> Result<()> { w.write_all(&self.0)?; |