module Rattletrap.Type.U32 where import qualified Data.Word as Word 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 U32 = U32 Word.Word32 deriving (Eq, Ord, Show) instance Json.FromJSON U32 where parseJSON = fmap fromWord32 . Json.parseJSON instance Json.ToJSON U32 where toJSON = Json.toJSON . toWord32 schema :: Schema.Schema schema = Schema.named "u32" $ Json.object [ Json.pair "type" "integer", Json.pair "minimum" (minBound :: Word.Word32), Json.pair "maximum" (maxBound :: Word.Word32) ] fromWord32 :: Word.Word32 -> U32 fromWord32 = U32 toWord32 :: U32 -> Word.Word32 toWord32 (U32 x) = x bytePut :: U32 -> BytePut.BytePut bytePut = BytePut.word32 . toWord32 bitPut :: U32 -> BitPut.BitPut bitPut = BitPut.fromBytePut . bytePut byteGet :: ByteGet.ByteGet U32 byteGet = ByteGet.label "U32" $ fmap fromWord32 ByteGet.word32 bitGet :: BitGet.BitGet U32 bitGet = BitGet.fromByteGet byteGet 4