module Hack2.Contrib.Response where
import Data.ByteString.Char8 (ByteString)
import Data.Maybe
import Hack2
import Hack2.Contrib.Constants
import Hack2.Contrib.Utils
import Air.Env
import Prelude ()
import Hack2.Contrib.AirBackports
import qualified Data.ByteString.Char8 as Strict
body_bytestring :: Response -> IO ByteString
body_bytestring = body > return
redirect :: ByteString -> Maybe Int -> Response -> Response
redirect target code =
set_status (code.fromMaybe 302)
> set_header _Location target
finish :: Response -> Response
finish r
| r.status.belongs_to [204, 304]
= r .delete_header _ContentType
.set_body def
| otherwise = r
header :: ByteString -> Response -> Maybe ByteString
header s r = r.headers.get s
has_header :: ByteString -> Response -> Bool
has_header s r = r.header s .isJust
set_header :: ByteString -> ByteString -> Response -> Response
set_header k v r = r { headers = r.headers.put k v }
delete_header :: ByteString -> Response -> Response
delete_header k r = r { headers = r.headers.reject (fst > is k) }
set_content_type :: ByteString -> Response -> Response
set_content_type s r = r.set_header _ContentType s
set_content_length :: (Integral a, Show a) => a -> Response -> Response
set_content_length i r = r.set_header _ContentLength (i.show_bytestring)
set_body :: ByteString -> Response -> Response
set_body s r = r { body = s }
set_body_bytestring :: ByteString -> Response -> Response
set_body_bytestring = set_body
set_status :: Int -> Response -> Response
set_status i r = r { status = i }
set_last_modified :: ByteString -> Response -> Response
set_last_modified s r = r.set_header _LastModified s