module Rattletrap.Encode.Replication
  ( putReplications
  )
where

import Rattletrap.Encode.CompressedWord
import Rattletrap.Encode.ReplicationValue
import Rattletrap.Type.Replication

import qualified Data.Binary.Bits.Put as BinaryBits

putReplications :: [Replication] -> BinaryBits.BitPut ()
putReplications :: [Replication] -> BitPut ()
putReplications [Replication]
replications = case [Replication]
replications of
  [] -> Bool -> BitPut ()
BinaryBits.putBool Bool
False
  [Replication
replication] -> do
    Replication -> BitPut ()
putReplication Replication
replication
    Bool -> BitPut ()
BinaryBits.putBool Bool
False
  Replication
first : [Replication]
rest -> do
    Replication -> BitPut ()
putReplication Replication
first
    [Replication] -> BitPut ()
putReplications [Replication]
rest

putReplication :: Replication -> BinaryBits.BitPut ()
putReplication :: Replication -> BitPut ()
putReplication Replication
replication = do
  Bool -> BitPut ()
BinaryBits.putBool Bool
True
  CompressedWord -> BitPut ()
putCompressedWord (Replication -> CompressedWord
replicationActorId Replication
replication)
  ReplicationValue -> BitPut ()
putReplicationValue (Replication -> ReplicationValue
replicationValue Replication
replication)