pack-0.4.0: Bidirectional fast ByteString packer/unpacker

LicenseBSD-style
Maintainercapsjac <capsjac at gmail dot com>
StabilityExperimental
PortabilityPortable
Safe HaskellNone
LanguageHaskell2010

Data.Pack.Packet

Description

 

Synopsis

Documentation

type Packer a = a -> Packet String a Source

A Packer recieves one value to pack and returns one Packet which is used to unpack the value of same type.

newtype Packet e a Source

Bidirectional packing/unpacking Monad.

Constructors

Packet 

Fields

unPacket :: (ByteString -> Ptr () -> Ptr () -> IO (Ptr (), Either e a), Int -> Int, ByteString -> Ptr () -> Ptr () -> IO (Ptr ()))
 

Instances

dimapP :: (b -> a) -> (a -> b) -> (a -> Packet e a) -> b -> Packet e b Source

Derived from lens package. Bidirectional mapping.

simple :: Storable a => Int -> (a -> b) -> (b -> a) -> Packer b Source

fixedPacket for Storable types.

fixedPacket :: (ByteString -> Ptr a -> IO a) -> (Ptr a -> a -> IO ()) -> Int -> (a -> b) -> (b -> a) -> Packer b Source

Generate a fixed-length Packer.

asymmPacket :: (ByteString -> IO (Int, Either String a)) -> (Ptr a -> IO ()) -> Int -> Packet String a Source

Generate a variable-length Packer.

checkBdr :: Int -> Ptr () -> Ptr () -> IO a -> IO (Either String a) Source

Unpackers should not read out of memory, so check the border here.

getTop :: ByteString -> IO (Ptr a) Source

Get a pointer to the head of given ByteString.