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