module Data.Binary.Codec
(
BinaryCodec
, byteString
, word8
, word16be, word16le, word16host
, word32be, word32le, word32host
, word64be, word64le, word64host
, wordhost
, int8
, int16be, int16le, int16host
, int32be, int32le, int32host
, int64be, int64le, int64host
, inthost
)
where
import Control.Monad.Codec
import qualified Data.ByteString as BS
import Data.Binary.Get
import Data.Binary.Put
import Data.Int
import Data.Word
type BinaryCodec a = Codec Get PutM a
byteString :: Int -> BinaryCodec BS.ByteString
byteString n = Codec
{ codecIn = getByteString n
, codecOut = \bs -> if BS.length bs == n
then bs <$ putByteString bs
else fail $ "Expected a ByteString of size " ++ show n
}
word8 :: BinaryCodec Word8
word8 = Codec getWord8 (fmapArg putWord8)
word16be :: BinaryCodec Word16
word16be = Codec getWord16be (fmapArg putWord16be)
word16le :: BinaryCodec Word16
word16le = Codec getWord16le (fmapArg putWord16le)
word16host :: BinaryCodec Word16
word16host = Codec getWord16host (fmapArg putWord16host)
word32be :: BinaryCodec Word32
word32be = Codec getWord32be (fmapArg putWord32be)
word32le :: BinaryCodec Word32
word32le = Codec getWord32le (fmapArg putWord32le)
word32host :: BinaryCodec Word32
word32host = Codec getWord32host (fmapArg putWord32host)
word64be :: BinaryCodec Word64
word64be = Codec getWord64be (fmapArg putWord64be)
word64le :: BinaryCodec Word64
word64le = Codec getWord64le (fmapArg putWord64le)
word64host :: BinaryCodec Word64
word64host = Codec getWord64host (fmapArg putWord64host)
wordhost :: BinaryCodec Word
wordhost = Codec getWordhost (fmapArg putWordhost)
int8 :: BinaryCodec Int8
int8 = Codec getInt8 (fmapArg putInt8)
int16be :: BinaryCodec Int16
int16be = Codec getInt16be (fmapArg putInt16be)
int16le :: BinaryCodec Int16
int16le = Codec getInt16le (fmapArg putInt16le)
int16host :: BinaryCodec Int16
int16host = Codec getInt16host (fmapArg putInt16host)
int32be :: BinaryCodec Int32
int32be = Codec getInt32be (fmapArg putInt32be)
int32le :: BinaryCodec Int32
int32le = Codec getInt32le (fmapArg putInt32le)
int32host :: BinaryCodec Int32
int32host = Codec getInt32host (fmapArg putInt32host)
int64be :: BinaryCodec Int64
int64be = Codec getInt64be (fmapArg putInt64be)
int64le :: BinaryCodec Int64
int64le = Codec getInt64le (fmapArg putInt64le)
int64host :: BinaryCodec Int64
int64host = Codec getInt64host (fmapArg putInt64host)
inthost :: BinaryCodec Int
inthost = Codec getInthost (fmapArg putInthost)