rattletrap-10.0.0: src/lib/Rattletrap/Type/I32.hs
module Rattletrap.Type.I32 where
import qualified Data.Int as Int
import qualified Rattletrap.BitGet as BitGet
import qualified Rattletrap.BitPut as BitPut
import qualified Rattletrap.ByteGet as ByteGet
import qualified Rattletrap.BytePut as BytePut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Utility.Json as Json
newtype I32
= I32 Int.Int32
deriving (Eq, Show)
instance Json.FromJSON I32 where
parseJSON = fmap fromInt32 . Json.parseJSON
instance Json.ToJSON I32 where
toJSON = Json.toJSON . toInt32
schema :: Schema.Schema
schema = Schema.named "i32" $ Json.object
[ Json.pair "type" "integer"
, Json.pair "minimum" (minBound :: Int.Int32)
, Json.pair "maximum" (maxBound :: Int.Int32)
]
fromInt32 :: Int.Int32 -> I32
fromInt32 = I32
toInt32 :: I32 -> Int.Int32
toInt32 (I32 x) = x
bytePut :: I32 -> BytePut.BytePut
bytePut = BytePut.int32 . toInt32
bitPut :: I32 -> BitPut.BitPut
bitPut = BitPut.fromBytePut . bytePut
byteGet :: ByteGet.ByteGet I32
byteGet = fromInt32 <$> ByteGet.int32
bitGet :: BitGet.BitGet I32
bitGet = BitGet.fromByteGet byteGet 4