{-# LANGUAGE OverloadedStrings #-}


module Web.Routes.Nested.FileExtListener.Builder where

import           Web.Routes.Nested.FileExtListener.Types

import qualified Data.ByteString.Builder                 as BU
import           Data.Map
import           Network.HTTP.Types                      (RequestHeaders,
                                                          Status, status200)
import           Network.Wai

import           Control.Monad.Writer


-- | A builder is ambiguous, therefore we require @RequestHeaders@ and a @FileExt@ to be explicitly
-- supplied.
builder :: Monad m => FileExt -> RequestHeaders -> BU.Builder -> FileExtListenerT Response m ()
builder e  = builderStatus e status200

builderStatus :: Monad m => FileExt -> Status -> RequestHeaders -> BU.Builder -> FileExtListenerT Response m ()
builderStatus e s hs i =
  let r = builderOnlyStatus s hs i in
  FileExtListenerT $ tell $
    FileExts $ singleton e r



builderOnly :: RequestHeaders -> BU.Builder -> Response
builderOnly = builderOnlyStatus status200

-- | The exact same thing as @Network.Wai.responseBuilder@.
builderOnlyStatus :: Status -> RequestHeaders -> BU.Builder -> Response
builderOnlyStatus = responseBuilder