module Network.HPACK (
ByteStream
, HeaderSet
, Context
, newContext
, DecodeError(..)
, HPACKEncoding
, HPACKDecoding
, encodeRequestHeader
, decodeRequestHeader
, encodeResponseHeader
, decodeResponseHeader
) where
import Control.Applicative ((<$>))
import Control.Arrow (second)
import Control.Exception (throwIO)
import Network.HPACK.Context
import Network.HPACK.HeaderBlock
import Network.HPACK.Huffman
import Network.HPACK.Types
type HPACKEncoding = Context -> HeaderSet -> IO (Context, ByteStream)
type HPACKDecoding = Context -> ByteStream -> IO (Context, HeaderSet)
encodeRequestHeader :: HPACKEncoding
encodeRequestHeader ctx hs = second toBS <$> toHeaderBlock ctx hs
where
toBS = toByteStream huffmanEncodeInRequest
decodeRequestHeader :: HPACKDecoding
decodeRequestHeader ctx bs = either throwIO (fromHeaderBlock ctx) ehb
where
ehb = fromByteStream huffmanDecodeInRequest bs
encodeResponseHeader :: HPACKEncoding
encodeResponseHeader ctx hs = second toBS <$> toHeaderBlock ctx hs
where
toBS = toByteStream huffmanEncodeInResponse
decodeResponseHeader :: HPACKDecoding
decodeResponseHeader ctx bs = either throwIO (fromHeaderBlock ctx) ehb
where
ehb = fromByteStream huffmanDecodeInResponse bs