module Rattletrap.Primitive.Word8 where import Rattletrap.Utility import qualified Data.Binary as Binary import qualified Data.Binary.Bits.Get as BinaryBit import qualified Data.Binary.Bits.Put as BinaryBit import qualified Data.Binary.Get as Binary import qualified Data.Binary.Put as Binary import qualified Data.ByteString.Lazy as ByteString import qualified Data.Word as Word newtype Word8 = Word8 { word8Value :: Word.Word8 } deriving (Eq, Ord, Show) getWord8 :: Binary.Get Word8 getWord8 = do word8 <- Binary.getWord8 pure (Word8 word8) putWord8 :: Word8 -> Binary.Put putWord8 word8 = Binary.putWord8 (word8Value word8) getWord8Bits :: BinaryBit.BitGet Word8 getWord8Bits = do bytes <- BinaryBit.getLazyByteString 1 pure (Binary.runGet getWord8 (reverseBytes bytes)) putWord8Bits :: Word8 -> BinaryBit.BitPut () putWord8Bits word8 = do let bytes = Binary.runPut (putWord8 word8) BinaryBit.putByteString (ByteString.toStrict (reverseBytes bytes))