module Edges.Cereal.Get
where

import Edges.Prelude
import Edges.Types
import Data.Serialize.Get
import qualified PrimitiveExtras.PrimArray as PrimArray
import qualified PrimitiveExtras.PrimMultiArray as PrimMultiArray


int :: Get Int
int = fromIntegral <$> getInt64le

nodeCounts :: Get (NodeCounts entity)
nodeCounts =
  NodeCounts <$> PrimArray.cerealGet int getWord32le

edges :: Get (Edges a b)
edges = do
  targetSpace <- int
  pma <- PrimMultiArray.cerealGet int getWord32le
  return (Edges targetSpace pma)

node :: Get (Node a)
node = Node <$> int