packages feed

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