use flatbuffers::Follow;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Struct<'a> {
buf: &'a [u8],
loc: usize,
}
impl<'a> Struct<'a> {
#[inline]
pub fn buf(&self) -> &'a [u8] {
self.buf
}
#[inline]
pub fn loc(&self) -> usize {
self.loc
}
#[inline]
pub unsafe fn new(buf: &'a [u8], loc: usize) -> Self {
Struct { buf, loc }
}
#[inline]
pub unsafe fn get<T: Follow<'a> + 'a>(&self, byte_loc: usize) -> T::Inner {
<T>::follow(self.buf, self.loc + byte_loc)
}
}
impl<'a> Follow<'a> for Struct<'a> {
type Inner = Struct<'a>;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Struct { buf, loc }
}
}