module Network.Protocol.Http
  (

  -- * HTTP message data types.

    Method (..)
  , Version
  , Key
  , Value
  , Headers (..)
  , Request (Request)
  , Response (Response)
  , Http (Http)

  -- * Creating (parts of) messages.

  , http10
  , http11
  , emptyHeaders
  , emptyRequest
  , emptyResponse

  -- * Accessing fields.

  , methods
  , major
  , minor
  , headers
  , version
  , headline
  , method
  , uri
  , asUri
  , status
  , normalizeHeader
  , header

  -- * Accessing specific header fields.

  , contentLength
  , connection
  , accept
  , acceptEncoding
  , acceptLanguage
  , cacheControl
  , keepAlive
  , cookie
  , setCookie
  , location
  , contentType
  , date
  , hostname
  , server
  , userAgent
  , upgrade
  , lastModified
  , acceptRanges
  , eTag

  -- * Parsing HTTP messages.

  , parseRequest
  , parseResponse
  , parseHeaders

  -- * Exposure of internal parsec parsers.

  , pRequest
  , pResponse
  , pHeaders
  , pVersion
  , pMethod

  -- * Parser helper methods.

  , versionFromString
  , methodFromString

  -- * Printer helper methods.

  , showRequestLine
  , showResponseLine

  -- * Handling HTTP status codes.

  , Status (..)
  , statusFailure
  , statusFromCode
  , codeFromStatus

  ) where

import Network.Protocol.Http.Data
import Network.Protocol.Http.Parser
import Network.Protocol.Http.Printer
import Network.Protocol.Http.Headers
import Network.Protocol.Http.Status