module Indexation.Cereal.Put where import Indexation.Prelude import Indexation.Types import Data.Serialize.Put import qualified Data.Vector.Generic as B {-# INLINE putVector #-} putVector :: (B.Vector vector element) => Putter element -> Putter (vector element) putVector putElement vector = putSize *> putElements where putSize = putInt64le (fromIntegral (B.length vector)) putElements = B.foldM'_ (const putElement) () vector putEntityTable :: Putter entity -> Putter (EntityTable entity) putEntityTable putEntity (EntityTable vector) = putVector putEntity vector putIndex :: Putter (Index entity) putIndex (Index int) = putInt64le (fromIntegral int)