module Network.HPACK.HeaderBlock.HeaderField (
  -- * Type
    HeaderBlock
  , emptyHeaderBlock
  , HeaderField(..)
  , HeaderName  -- re-exporting
  , HeaderValue -- re-exporting
  , Index       -- re-exporting
  , Indexing(..)
  , Naming(..)
  ) where

import Network.HPACK.Types

----------------------------------------------------------------

-- | Type for header block.
type HeaderBlock = [HeaderField]

-- | Empty header block.
emptyHeaderBlock :: HeaderBlock
emptyHeaderBlock = []

-- | Type for representation.
data HeaderField = ChangeTableSize !Int
                 | Indexed !Index
                 | Literal !Indexing !Naming !HeaderValue
                 deriving (Eq,Show)

-- | Whether or not adding to a table.
data Indexing = Add | NotAdd | Never deriving (Eq,Show)

-- | Index or literal.
data Naming = Idx !Index | Lit !HeaderName deriving (Eq,Show)