module Rattletrap.Decode.List
  ( decodeList
  )
where

import Rattletrap.Decode.Common
import Rattletrap.Decode.Word32le
import Rattletrap.Type.List
import Rattletrap.Type.Word32le

import qualified Control.Monad as Monad

decodeList :: Decode a -> Decode (List a)
decodeList decodeElement = do
  size <- decodeWord32le
  List <$> Monad.replicateM (fromIntegral (word32leValue size)) decodeElement