module Snap.Snaplet.Redson.Util where
import Control.Applicative
import Data.Char (isDigit)
import Data.ByteString (ByteString)
import qualified Data.ByteString.UTF8 as BU (toString)
import Data.Maybe
import Snap.Core
fromParam :: MonadSnap m => ByteString -> m ByteString
fromParam p = fromMaybe "" <$> getParam p
fromIntParam :: MonadSnap m => ByteString -> Int -> m Int
fromIntParam p def = do
i <- getParam p
return $ case i of
Just b -> let
s = BU.toString b
in
if (all isDigit s) then (read s)
else def
_ -> def
data Error = Error { code :: Int
}
handleError :: MonadSnap m => Error -> m ()
handleError err = do
modifyResponse $ setResponseCode (code err)
r <- getResponse
finishWith r
notFound :: Error
notFound = Error 404
serverError :: Error
serverError = Error 500
unauthorized :: Error
unauthorized = Error 401
forbidden :: Error
forbidden = Error 403