module Data.Store.Streaming.Internal
  ( messageMagic
  , magicLength
  , sizeTagLength
  , headerLength
  , SizeTag
  ) where

import           Data.Word (Word64)
import qualified Foreign.Storable as Storable

-- | Type used to store the length of a 'Message'.
type SizeTag = Int

-- | Some fixed arbitrary magic number that precedes every 'Message'.
messageMagic :: Word64
messageMagic :: Word64
messageMagic = Word64
18205256374652458875

magicLength :: Int
magicLength :: SizeTag
magicLength = forall a. Storable a => a -> SizeTag
Storable.sizeOf Word64
messageMagic

sizeTagLength :: Int
sizeTagLength :: SizeTag
sizeTagLength = forall a. Storable a => a -> SizeTag
Storable.sizeOf (forall a. HasCallStack => a
undefined :: SizeTag)

headerLength :: Int
headerLength :: SizeTag
headerLength = SizeTag
sizeTagLength forall a. Num a => a -> a -> a
+ SizeTag
magicLength