primitive-extras-0.1.10: library/PrimitiveExtras/Cereal/Put.hs
module PrimitiveExtras.Cereal.Put
where
import PrimitiveExtras.Prelude
import PrimitiveExtras.Types
import Data.Serialize.Put
import qualified PrimitiveExtras.Monad as Monad
primArray :: Prim element => Putter element -> Putter (PrimArray element)
primArray element primArrayValue =
size <> elements
where
size = putInt64le (fromIntegral (sizeofPrimArray primArrayValue))
elements = traversePrimArray_ element primArrayValue
primMultiArray :: Prim element => Putter element -> Putter (PrimMultiArray element)
primMultiArray element (PrimMultiArray outerArrayValue) =
size <> innerArrays
where
size = putInt64le (fromIntegral (sizeofUnliftedArray outerArrayValue))
innerArrays = Monad.traverseUnliftedArray_ (primArray element) outerArrayValue