module Rattletrap.Encode.PropertyValue
  ( putPropertyValue
  )
where

import Rattletrap.Encode.Dictionary
import Rattletrap.Encode.Float32le
import Rattletrap.Encode.Int32le
import Rattletrap.Encode.List
import Rattletrap.Encode.Str
import Rattletrap.Encode.Word64le
import Rattletrap.Encode.Word8le
import Rattletrap.Type.PropertyValue

import qualified Data.Binary as Binary

putPropertyValue :: (a -> Binary.Put) -> PropertyValue a -> Binary.Put
putPropertyValue :: (a -> Put) -> PropertyValue a -> Put
putPropertyValue a -> Put
putProperty PropertyValue a
value = case PropertyValue a
value of
  PropertyValueArray List (Dictionary a)
list -> (Dictionary a -> Put) -> List (Dictionary a) -> Put
forall a. (a -> Put) -> List a -> Put
putList ((a -> Put) -> Dictionary a -> Put
forall a. (a -> Put) -> Dictionary a -> Put
putDictionary a -> Put
putProperty) List (Dictionary a)
list
  PropertyValueBool Word8le
word8 -> Word8le -> Put
putWord8 Word8le
word8
  PropertyValueByte Str
k Maybe Str
mv -> do
    Str -> Put
putText Str
k
    case Maybe Str
mv of
      Maybe Str
Nothing -> () -> Put
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
      Just Str
v -> Str -> Put
putText Str
v
  PropertyValueFloat Float32le
float32 -> Float32le -> Put
putFloat32 Float32le
float32
  PropertyValueInt Int32le
int32 -> Int32le -> Put
putInt32 Int32le
int32
  PropertyValueName Str
text -> Str -> Put
putText Str
text
  PropertyValueQWord Word64le
word64 -> Word64le -> Put
putWord64 Word64le
word64
  PropertyValueStr Str
text -> Str -> Put
putText Str
text