{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE AllowAmbiguousTypes #-} {-# OPTIONS_HADDOCK not-home #-} module FlatBuffers.Internal.Types where import Data.Word import FlatBuffers.Internal.Compiler.Display ( Display ) -- | Metadata for a struct type. class IsStruct a where structAlignmentOf :: Alignment structSizeOf :: InlineSize -- | The number of bytes occupied by a piece of data that's stored "inline" -- -- "inline" here means "stored directly in a table or a vector, and not by reference". -- E.g.: numeric types, booleans, structs, offsets. newtype InlineSize = InlineSize { unInlineSize :: Word16 } deriving newtype (Show, Eq, Num, Enum, Ord, Real, Integral, Bounded) -- | The memory alignment (in bytes) for a piece of data in a flatbuffer. -- E.g., `Data.Int.Int32` are always aligned to 4 bytes. -- This number should always be a power of 2 in the range [1, 16]. newtype Alignment = Alignment { unAlignment :: Word8 } deriving newtype (Show, Eq, Num, Enum, Ord, Real, Integral, Bounded, Display)