{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DoAndIfThenElse #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Web.Spock.Action
  ( -- * Action types
    ActionT,
    W.ActionCtxT,

    -- * Handling requests
    request,
    header,
    rawHeader,
    cookies,
    cookie,
    reqMethod,
    preferredFormat,
    ClientPreferredFormat (..),
    body,
    jsonBody,
    jsonBody',
    files,
    UploadedFile (..),
    params,
    paramsGet,
    paramsPost,
    param,
    param',

    -- * Working with context
    getContext,
    runInContext,

    -- * Sending responses
    setStatus,
    setHeader,
    redirect,
    jumpNext,
    CookieSettings (..),
    defaultCookieSettings,
    CookieEOL (..),
    setCookie,
    deleteCookie,
    bytes,
    lazyBytes,
    setRawMultiHeader,
    MultiHeader (..),
    text,
    html,
    file,
    json,
    stream,
    response,
    respondApp,
    respondMiddleware,

    -- * Middleware helpers
    middlewarePass,
    modifyVault,
    queryVault,

    -- * Basic HTTP-Auth
    requireBasicAuth,
    withBasicAuthData,
  )
where

import Web.Spock.Internal.CoreAction
import qualified Web.Spock.Internal.Wire as W