package flatbuffers // FlatBuffer is the interface that represents a flatbuffer. type FlatBuffer interface { Table() Table Init(buf []byte, i UOffsetT) } // GetRootAs is a generic helper to initialize a FlatBuffer with the provided buffer bytes and its data offset. func GetRootAs(buf []byte, offset UOffsetT, fb FlatBuffer) { n := GetUOffsetT(buf[offset:]) fb.Init(buf, n+offset) } // GetSizePrefixedRootAs is a generic helper to initialize a FlatBuffer with the provided size-prefixed buffer // bytes and its data offset func GetSizePrefixedRootAs(buf []byte, offset UOffsetT, fb FlatBuffer) { n := GetUOffsetT(buf[offset+sizePrefixLength:]) fb.Init(buf, n+offset+sizePrefixLength) } // GetSizePrefix reads the size from a size-prefixed flatbuffer func GetSizePrefix(buf []byte, offset UOffsetT) uint32 { return GetUint32(buf[offset:]) } // GetIndirectOffset retrives the relative offset in the provided buffer stored at `offset`. func GetIndirectOffset(buf []byte, offset UOffsetT) UOffsetT { return offset + GetUOffsetT(buf[offset:]) } // GetBufferIdentifier returns the file identifier as string func GetBufferIdentifier(buf []byte) string { return string(buf[SizeUOffsetT:][:fileIdentifierLength]) } // GetBufferIdentifier returns the file identifier as string for a size-prefixed buffer func GetSizePrefixedBufferIdentifier(buf []byte) string { return string(buf[SizeUOffsetT+sizePrefixLength:][:fileIdentifierLength]) } // BufferHasIdentifier checks if the identifier in a buffer has the expected value func BufferHasIdentifier(buf []byte, identifier string) bool { return GetBufferIdentifier(buf) == identifier } // BufferHasIdentifier checks if the identifier in a buffer has the expected value for a size-prefixed buffer func SizePrefixedBufferHasIdentifier(buf []byte, identifier string) bool { return GetSizePrefixedBufferIdentifier(buf) == identifier }