module Rattletrap.Encode.Float32le
  ( putFloat32
  , putFloat32Bits
  )
where

import Rattletrap.Type.Float32le
import Rattletrap.Utility.Bytes

import qualified Data.Binary as Binary
import qualified Data.Binary.Bits.Put as BinaryBits
import qualified Data.Binary.Put as Binary
import qualified Data.ByteString.Lazy as LazyBytes

putFloat32 :: Float32le -> Binary.Put
putFloat32 :: Float32le -> Put
putFloat32 = Float -> Put
Binary.putFloatle (Float -> Put) -> (Float32le -> Float) -> Float32le -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float32le -> Float
float32leValue

putFloat32Bits :: Float32le -> BinaryBits.BitPut ()
putFloat32Bits :: Float32le -> BitPut ()
putFloat32Bits Float32le
float32 = do
  let bytes :: ByteString
bytes = ByteString -> ByteString
LazyBytes.toStrict (Put -> ByteString
Binary.runPut (Float32le -> Put
putFloat32 Float32le
float32))
  ByteString -> BitPut ()
BinaryBits.putByteString (ByteString -> ByteString
reverseBytes ByteString
bytes)