{-# LANGUAGE UndecidableInstances #-}

-- | Html servers
module Mig.Extra.Server.Html (
  -- * Http verbs
  Get,
  Post,
  Put,
  Delete,
  Patch,
  Options,
  Head,
  Trace,

  -- * Response
  Resp (..),
  RespOr,

  -- * re-exports
  Body (..),
  module X,
) where

import Mig.Core (Body (..))
import Mig.Core qualified as Core
import Mig.Extra.Server.Common as X

-- response

newtype Resp a = Resp (Core.Resp Html a)
  deriving newtype (MediaType
ResponseHeaders -> Resp a -> Resp a
MediaType -> Resp a -> Resp a
Status -> Resp a
Status -> RespError (Resp a) -> Resp a
Status -> Resp a -> Resp a
RespBody (Resp a) -> Resp a
Resp a -> ResponseHeaders
Resp a -> Maybe (RespError (Resp a))
Resp a -> Maybe (RespBody (Resp a))
Resp a -> Status
Resp a -> Response
forall a. ToMarkup a => MediaType
forall a. ToMarkup a => ResponseHeaders -> Resp a -> Resp a
forall a. ToMarkup a => MediaType -> Resp a -> Resp a
forall a. ToMarkup a => Status -> Resp a
forall a. ToMarkup a => Status -> RespError (Resp a) -> Resp a
forall a. ToMarkup a => Status -> Resp a -> Resp a
forall a. ToMarkup a => RespBody (Resp a) -> Resp a
forall a. ToMarkup a => Resp a -> ResponseHeaders
forall a. ToMarkup a => Resp a -> Maybe (RespError (Resp a))
forall a. ToMarkup a => Resp a -> Maybe (RespBody (Resp a))
forall a. ToMarkup a => Resp a -> Status
forall a. ToMarkup a => Resp a -> Response
forall a.
(RespBody a -> a)
-> (Status -> RespError a -> a)
-> (Status -> a)
-> (ResponseHeaders -> a -> a)
-> (a -> ResponseHeaders)
-> (Status -> a -> a)
-> (a -> Maybe (RespBody a))
-> (a -> Maybe (RespError a))
-> (a -> Status)
-> (MediaType -> a -> a)
-> MediaType
-> (a -> Response)
-> IsResp a
toResponse :: Resp a -> Response
$ctoResponse :: forall a. ToMarkup a => Resp a -> Response
getMedia :: MediaType
$cgetMedia :: forall a. ToMarkup a => MediaType
setMedia :: MediaType -> Resp a -> Resp a
$csetMedia :: forall a. ToMarkup a => MediaType -> Resp a -> Resp a
getStatus :: Resp a -> Status
$cgetStatus :: forall a. ToMarkup a => Resp a -> Status
getRespError :: Resp a -> Maybe (RespError (Resp a))
$cgetRespError :: forall a. ToMarkup a => Resp a -> Maybe (RespError (Resp a))
getRespBody :: Resp a -> Maybe (RespBody (Resp a))
$cgetRespBody :: forall a. ToMarkup a => Resp a -> Maybe (RespBody (Resp a))
setStatus :: Status -> Resp a -> Resp a
$csetStatus :: forall a. ToMarkup a => Status -> Resp a -> Resp a
getHeaders :: Resp a -> ResponseHeaders
$cgetHeaders :: forall a. ToMarkup a => Resp a -> ResponseHeaders
addHeaders :: ResponseHeaders -> Resp a -> Resp a
$caddHeaders :: forall a. ToMarkup a => ResponseHeaders -> Resp a -> Resp a
noContent :: Status -> Resp a
$cnoContent :: forall a. ToMarkup a => Status -> Resp a
bad :: Status -> RespError (Resp a) -> Resp a
$cbad :: forall a. ToMarkup a => Status -> RespError (Resp a) -> Resp a
ok :: RespBody (Resp a) -> Resp a
$cok :: forall a. ToMarkup a => RespBody (Resp a) -> Resp a
IsResp)

type RespOr err a = Either (Resp err) (Resp a)

type Get m a = Send GET m (Resp a)
type Post m a = Send POST m (Resp a)
type Put m a = Send PUT m (Resp a)
type Delete m a = Send DELETE m (Resp a)
type Patch m a = Send PATCH m (Resp a)
type Options m a = Send OPTIONS m (Resp a)
type Head m a = Send HEAD m (Resp a)
type Trace m a = Send TRACE m (Resp a)