module Hack.Contrib.Utils where
import Control.Arrow ((<<<))
import Data.ByteString.Lazy.Char8 (ByteString)
import Data.Default
import Data.List (lookup)
import Data.Time
import Hack
import Hack.Contrib.Constants
import MPS.Light
import Network.URI hiding (path)
import Prelude hiding ((.), (^), (>), lookup, (+), (/), ())
import System.Locale (defaultTimeLocale)
import qualified Data.ByteString.Lazy.Char8 as B
import qualified Data.Map as M
empty_app :: Application
empty_app = return def
use :: [Middleware] -> Middleware
use = reduce (<<<)
put :: String -> String -> [(String, String)] -> [(String, String)]
put k v xs = (k,v) : xs.reject (fst > is k)
get :: String -> [(String, String)] -> Maybe String
get = lookup
bytesize :: ByteString -> Int
bytesize = B.length > from_i
dummy_middleware :: Middleware
dummy_middleware = id
dummy_app :: Application
dummy_app _ = return def { status = 500 }
escape_html :: String -> String
escape_html = concatMap fixChar
where
fixChar '&' = "&"
fixChar '<' = "<"
fixChar '>' = ">"
fixChar '\'' = "'"
fixChar '"' = """
fixChar x = [x]
escape_uri :: String -> String
escape_uri = escapeURIString isAllowedInURI
unescape_uri :: String -> String
unescape_uri = unEscapeString
show_status_message :: Int -> Maybe String
show_status_message x = status_code.M.lookup x
now :: IO UTCTime
now = getCurrentTime
httpdate :: UTCTime -> String
httpdate x = x.format_time "%a, %d %b %Y %X GMT"
format_time :: String -> UTCTime -> String
format_time = formatTime defaultTimeLocale
request_method :: Env -> RequestMethod
script_name :: Env -> String
path_info :: Env -> String
query_string :: Env -> String
server_name :: Env -> String
server_port :: Env -> Int
hack_version :: Env -> [Int]
hack_url_scheme :: Env -> Hack_UrlScheme
hack_input :: Env -> ByteString
hack_errors :: Env -> HackErrors
custom :: Env -> [(String, String)]
remote_host :: Env -> String
request_method = requestMethod
script_name = scriptName
path_info = pathInfo
query_string = queryString
server_name = serverName
server_port = serverPort
hack_version = hackVersion
hack_url_scheme = hackUrlScheme
hack_input = hackInput
hack_errors = hackErrors
custom = hackHeaders
remote_host = remoteHost