{-# LANGUAGE OverloadedStrings #-}


module Web.Routes.Nested.FileExtListener.ByteString where

import           Web.Routes.Nested.FileExtListener.Types

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

import           Control.Monad.Writer


-- | @ByteString@ is ambiguous - we need to know what @RequestHeaders@ and @FileExt@ should be associated.
bytestring :: Monad m => FileExt -> RequestHeaders -> B.ByteString -> FileExtListenerT Response m ()
bytestring e hs i =
  let r = responseLBS status200 hs i in
  FileExtListenerT $ tell $
    FileExts $ singleton e r

bytestringStatus :: Monad m => FileExt -> Status -> RequestHeaders -> B.ByteString -> FileExtListenerT Response m ()
bytestringStatus e s hs i =
  let r = responseLBS s hs i in
  FileExtListenerT $ tell $
    FileExts $ singleton e r


bytestringOnly :: RequestHeaders -> B.ByteString -> Response
bytestringOnly = responseLBS status200

-- | The exact same thing as @Network.Wai.responseLBS@.
bytestringOnlyStatus :: Status -> RequestHeaders -> B.ByteString -> Response
bytestringOnlyStatus = responseLBS