module Network.HTTP.Types (
    -- * Methods

    -- | __For more information__: "Network.HTTP.Types.Method"

    Method,

    -- ** Constants
    methodGet,
    methodPost,
    methodHead,
    methodPut,
    methodDelete,
    methodTrace,
    methodConnect,
    methodOptions,
    methodPatch,
    StdMethod (..),

    -- ** Parsing and redering methods
    parseMethod,
    renderMethod,
    renderStdMethod,

    -- * Versions

    -- | __For more information__: "Network.HTTP.Types.Version"

    HttpVersion (..),
    http09,
    http10,
    http11,
    http20,
    http30,

    -- * Status

    -- | __For more information__: "Network.HTTP.Types.Status"

    Status (..),

    -- ** Constants
    mkStatus,
    status100,
    continue100,
    status101,
    switchingProtocols101,
    status200,
    ok200,
    status201,
    created201,
    status202,
    accepted202,
    status203,
    nonAuthoritative203,
    status204,
    noContent204,
    status205,
    resetContent205,
    status206,
    partialContent206,
    status300,
    multipleChoices300,
    status301,
    movedPermanently301,
    status302,
    found302,
    status303,
    seeOther303,
    status304,
    notModified304,
    status305,
    useProxy305,
    status307,
    temporaryRedirect307,
    status308,
    permanentRedirect308,
    status400,
    badRequest400,
    status401,
    unauthorized401,
    status402,
    paymentRequired402,
    status403,
    forbidden403,
    status404,
    notFound404,
    status405,
    methodNotAllowed405,
    status406,
    notAcceptable406,
    status407,
    proxyAuthenticationRequired407,
    status408,
    requestTimeout408,
    status409,
    conflict409,
    status410,
    gone410,
    status411,
    lengthRequired411,
    status412,
    preconditionFailed412,
    status413,
    requestEntityTooLarge413,
    status414,
    requestURITooLong414,
    status415,
    unsupportedMediaType415,
    status416,
    requestedRangeNotSatisfiable416,
    status417,
    expectationFailed417,
    status418,
    imATeapot418,
    status422,
    unprocessableEntity422,
    status426,
    upgradeRequired426,
    status428,
    preconditionRequired428,
    status429,
    tooManyRequests429,
    status431,
    requestHeaderFieldsTooLarge431,
    status451,
    unavailableForLegalReasons451,
    status500,
    internalServerError500,
    status501,
    notImplemented501,
    status502,
    badGateway502,
    status503,
    serviceUnavailable503,
    status504,
    gatewayTimeout504,
    status505,
    httpVersionNotSupported505,
    status511,
    networkAuthenticationRequired511,
    statusIsInformational,
    statusIsSuccessful,
    statusIsRedirection,
    statusIsClientError,
    statusIsServerError,

    -- * Headers

    -- | __For more information__: "Network.HTTP.Types.Header"

    -- ** Types
    Header,
    HeaderName,
    RequestHeaders,
    ResponseHeaders,

    -- ** Header constants
    hAccept,
    hAcceptCharset,
    hAcceptEncoding,
    hAcceptLanguage,
    hAcceptRanges,
    hAge,
    hAllow,
    hAuthorization,
    hCacheControl,
    hConnection,
    hContentDisposition,
    hContentEncoding,
    hContentLanguage,
    hContentLength,
    hContentLocation,
    hContentMD5,
    hContentRange,
    hContentType,
    hCookie,
    hDate,
    hETag,
    hExpect,
    hExpires,
    hFrom,
    hHost,
    hIfMatch,
    hIfModifiedSince,
    hIfNoneMatch,
    hIfRange,
    hIfUnmodifiedSince,
    hLastModified,
    hLocation,
    hMaxForwards,
    hMIMEVersion,
    hOrigin,
    hPragma,
    hPrefer,
    hPreferenceApplied,
    hProxyAuthenticate,
    hProxyAuthorization,
    hRange,
    hReferer,
    hRetryAfter,
    hServer,
    hSetCookie,
    hTE,
    hTrailer,
    hTransferEncoding,
    hUpgrade,
    hUserAgent,
    hVary,
    hVia,
    hWWWAuthenticate,
    hWarning,

    -- ** Byte ranges
    ByteRange (..),
    renderByteRangeBuilder,
    renderByteRange,
    ByteRanges,
    renderByteRangesBuilder,
    renderByteRanges,
    parseByteRanges,

    -- * URI

    -- | __For more extensive information__: "Network.HTTP.Types.URI"

    -- ** Query strings

    -- *** Query
    Query,
    QueryItem,
    renderQuery,
    renderQueryBuilder,
    parseQuery,
    parseQueryReplacePlus,

    -- *** Text query string (UTF8 encoded)
    QueryText,
    queryTextToQuery,
    queryToQueryText,
    renderQueryText,
    parseQueryText,

    -- *** SimpleQuery
    SimpleQuery,
    SimpleQueryItem,
    simpleQueryToQuery,
    renderSimpleQuery,
    parseSimpleQuery,

    -- *** PartialEscapeQuery
    PartialEscapeQuery,
    PartialEscapeQueryItem,
    EscapeItem (..),
    renderQueryPartialEscape,
    renderQueryBuilderPartialEscape,

    -- ** Generalized query types
    QueryLike (..),
    QueryKeyLike (..),
    QueryValueLike (..),

    -- ** Path

    -- *** Segments + Query String
    extractPath,
    encodePath,
    decodePath,

    -- *** Path Segments
    encodePathSegments,
    encodePathSegmentsRelative,
    decodePathSegments,

    -- ** URL encoding / decoding
    urlEncode,
    urlEncodeBuilder,
    urlDecode,
)
where

import Network.HTTP.Types.Header
import Network.HTTP.Types.Method
import Network.HTTP.Types.QueryLike
import Network.HTTP.Types.Status
import Network.HTTP.Types.URI
import Network.HTTP.Types.Version
