webapp-0.1.0: example/Main.hs
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Web.App
import Web.Scotty.Trans
import Options.Applicative
import Network.HTTP.Types (Status(..))
import Data.Text.Lazy (Text)
import qualified Data.ByteString.Lazy.Char8 as BL
instance WebAppState Integer where
initState = return 0
destroyState st = do
putStr "Counted: "
print st
main :: IO ()
main = webappMain app "My Web App" (Just parseUtil) handleUtil
app :: ScottyT Text (WebAppM Integer) ()
app = do
get "/" $ do
getState >>= raw . BL.pack . show
get "/add" $ do
modifyState ((+) 1)
status $ Status 302 ""
setHeader "Location" "/"
get "/subtract" $ do
count <- getState
putState $ count-1
status $ Status 302 ""
setHeader "Location" "/"
get "/assets/:file" $ param "file" >>= loadAsset
data Util = Password String
parseUtil :: Parser Util
parseUtil = subparser $ (mkcmd "password" "Hash a password" parsePassword)
where
parsePassword = Password <$> (strArgument $ metavar "PASSWORD" <> help "password to hash")
mkcmd cmd desc p = command cmd $ info (helper <*> p) $ progDesc desc
handleUtil :: Util -> IO ()
handleUtil (Password str) = putStrLn str