use buf_macros::McBuf; use std::ops::Deref; /// A Vec that isn't prefixed by a VarInt with the size. #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct UnsizedByteArray(Vec); impl Deref for UnsizedByteArray { type Target = Vec; fn deref(&self) -> &Self::Target { &self.0 } } impl From> for UnsizedByteArray { fn from(vec: Vec) -> Self { Self(vec) } } impl From<&str> for UnsizedByteArray { fn from(s: &str) -> Self { Self(s.as_bytes().to_vec()) } } /// Represents Java's BitSet, a list of bits. #[derive(Debug, Clone, PartialEq, Eq, Hash, McBuf)] pub struct BitSet { data: Vec, } // the Index trait requires us to return a reference, but we can't do that impl BitSet { pub fn index(&self, index: usize) -> bool { (self.data[index / 64] & (1u64 << (index % 64))) != 0 } }