module Rattletrap.Type.Property.Float where

import qualified Rattletrap.ByteGet as ByteGet
import qualified Rattletrap.BytePut as BytePut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Type.F32 as F32
import qualified Rattletrap.Utility.Json as Json
import Prelude hiding (Float)

newtype Float
  = Float F32.F32
  deriving (Float -> Float -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Float -> Float -> Bool
$c/= :: Float -> Float -> Bool
== :: Float -> Float -> Bool
$c== :: Float -> Float -> Bool
Eq, Int -> Float -> ShowS
[Float] -> ShowS
Float -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Float] -> ShowS
$cshowList :: [Float] -> ShowS
show :: Float -> String
$cshow :: Float -> String
showsPrec :: Int -> Float -> ShowS
$cshowsPrec :: Int -> Float -> ShowS
Show)

fromF32 :: F32.F32 -> Float
fromF32 :: F32 -> Float
fromF32 = F32 -> Float
Float

toF32 :: Float -> F32.F32
toF32 :: Float -> F32
toF32 (Float F32
x) = F32
x

instance Json.FromJSON Float where
  parseJSON :: Value -> Parser Float
parseJSON = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap F32 -> Float
fromF32 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. FromJSON a => Value -> Parser a
Json.parseJSON

instance Json.ToJSON Float where
  toJSON :: Float -> Value
toJSON = forall a. ToJSON a => a -> Value
Json.toJSON forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> F32
toF32

schema :: Schema.Schema
schema :: Schema
schema = Schema
F32.schema

bytePut :: Float -> BytePut.BytePut
bytePut :: Float -> BytePut
bytePut = F32 -> BytePut
F32.bytePut forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> F32
toF32

byteGet :: ByteGet.ByteGet Float
byteGet :: ByteGet Float
byteGet = forall a. String -> ByteGet a -> ByteGet a
ByteGet.label String
"Float" forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap F32 -> Float
fromF32 ByteGet F32
F32.byteGet