diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-20 20:19:47 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-20 20:19:47 +0100 |
commit | d5d2cf91f6c019d4b491e7ec245278a7703a5b03 (patch) | |
tree | a6027216ee84392fb8a81fb194e45047f8ec9ecc /shared/src/helper.rs | |
parent | c2af119485fd62956d15bdf1155a0fdd7d0cf73e (diff) | |
download | weareserver-d5d2cf91f6c019d4b491e7ec245278a7703a5b03.tar weareserver-d5d2cf91f6c019d4b491e7ec245278a7703a5b03.tar.bz2 weareserver-d5d2cf91f6c019d4b491e7ec245278a7703a5b03.tar.zst |
update armature types
Diffstat (limited to 'shared/src/helper.rs')
-rw-r--r-- | shared/src/helper.rs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/shared/src/helper.rs b/shared/src/helper.rs index 723f91e..14fb2bd 100644 --- a/shared/src/helper.rs +++ b/shared/src/helper.rs @@ -220,6 +220,63 @@ impl ReadWrite for Vec<f32> { .collect()) } } +impl ReadWrite for Vec<u16> { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for e in self { + e.write(w)?; + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut buf = Vec::new(); + r.read_to_end(&mut buf)?; + Ok(buf + .into_iter() + .array_chunks::<{ size_of::<u16>() }>() + .map(u16::from_be_bytes) + .collect()) + } +} +impl ReadWrite for Vec<Affine3A> { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for e in self { + e.write(w)?; + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut buf = Vec::new(); + r.read_to_end(&mut buf)?; + Ok(buf + .into_iter() + .array_chunks::<{ size_of::<f32>() }>() + .map(f32::from_be_bytes) + .array_chunks::<12>() + .map(|m| Affine3A::from_cols_array(&m)) + .collect()) + } +} +impl ReadWrite for Vec<String> { + fn write(&self, w: &mut dyn Write) -> Result<()> { + for e in self { + w.write_all(&(e.len() as u16).to_le_bytes())?; + w.write_all(e.as_bytes())?; + } + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut buf = Vec::new(); + r.read_to_end(&mut buf)?; + let mut buf = buf.as_slice(); + let mut out = Vec::new(); + while !buf.is_empty() { + let size = u16::read(&mut buf)? as usize; + out.push(String::read(&mut &buf[..size])?); + buf = &buf[size..]; + } + Ok(out) + } +} impl ReadWrite for String { fn write(&self, w: &mut dyn Write) -> Result<()> { w.write_all(self.as_bytes())?; @@ -364,3 +421,14 @@ impl ReadWrite for u8 { Ok(buf[0]) } } +impl ReadWrite for u16 { + fn write(&self, w: &mut dyn Write) -> Result<()> { + w.write_all(&self.to_be_bytes())?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut buf = [0u8; 2]; + r.read_exact(&mut buf)?; + Ok(u16::from_be_bytes(buf)) + } +} |