import qualified Data.Text as T
import Data.Time
import qualified Data.Time.HTTP as HTTP
+import Data.Typeable
import Network.HTTP.Lucu.Abortion
import Network.HTTP.Lucu.Authentication
import Network.HTTP.Lucu.Config
let statusForNoneMatch
= if method ≡ GET ∨ method ≡ HEAD then
- NotModified
+ fromStatusCode NotModified
else
- PreconditionFailed
+ fromStatusCode PreconditionFailed
-- If-None-Match があればそれを見る。
ifNoneMatch ← getHeader "If-None-Match"
let statusForIfModSince
= if method ≡ GET ∨ method ≡ HEAD then
- NotModified
+ fromStatusCode NotModified
else
- PreconditionFailed
+ fromStatusCode PreconditionFailed
-- If-Modified-Since があればそれを見る。
ifModSince ← getHeader "If-Modified-Since"
-- |@'redirect' code uri@ declares the response status as @code@ and
-- \"Location\" header field as @uri@. The @code@ must satisfy
-- 'isRedirection' or it raises an error.
-redirect ∷ StatusCode → URI → Resource ()
-redirect code uri
- = do when (code ≡ NotModified ∨ not (isRedirection code))
+redirect ∷ StatusCode sc ⇒ sc → URI → Resource ()
+redirect sc uri
+ = do when (cast sc ≡ Just NotModified ∨ (¬) (isRedirection sc))
$ abort
$ mkAbortion' InternalServerError
$ A.toText
$ A.fromAsciiBuilder
$ A.toAsciiBuilder "Attempted to redirect with status "
- ⊕ printStatusCode code
- setStatus code
+ ⊕ printStatusCode sc
+ setStatus sc
setLocation uri
-- |@'setContentType' mType@ declares the response header