module Data.Binary.Bits.Codec
( BitCodec
, bool
, word8, word16be, word32be, word64be
, toBytes
)
where
import Control.Applicative
import qualified Data.Binary.Bits.Get as G
import Data.Binary.Bits.Put
import qualified Data.Binary.Codec as B
import Data.Codec
import Data.Word
type BitCodec a = Codec G.Block BitPut a
bool :: BitCodec Bool
bool = Codec G.bool putBool
word8 :: Int -> BitCodec Word8
word8 = Codec <$> G.word8 <*> putWord8
word16be :: Int -> BitCodec Word16
word16be = Codec <$> G.word16be <*> putWord16be
word32be :: Int -> BitCodec Word32
word32be = Codec <$> G.word32be <*> putWord32be
word64be :: Int -> BitCodec Word64
word64be = Codec <$> G.word64be <*> putWord64be
toBytes :: BitCodec a -> B.BinaryCodec a
toBytes (Codec r w)
= Codec (G.runBitGet $ G.block r) (runBitPut . w)