{-| Module : Resources.Client Description : Copyright : (c) Alexander Vieth, 2015 Licence : BSD3 Maintainer : aovieth@gmail.com Stability : experimental Portability : non-portable (GHC only) -} {-# LANGUAGE AutoDeriveTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE RankNTypes #-} module Resources.Client ( resource ) where import Control.Monad.Trans.Class import Control.Monad.Trans.State as S import Control.Monad.Trans.Reader import Control.Monad.Trans.Except import qualified Data.Map as M import Data.Hourglass import Data.ByteString as BS import qualified Data.ByteString.Lazy as BL import Rest import Rest.Resource as R import Types.Server import Types.GameId import Types.Credentials import Types.GameState import Resources.Game.Create as Create import Resources.Game.Remove as Remove resource :: Resource Server Server () Void Void resource = (mkResource enter) { R.name = "diplomacy" , R.schema = Rest.singleton () (named []) , R.get = Just get } where enter :: forall b . () -> Server b -> Server b enter _ = id get :: Handler Server get = secureHandler $ mkConstHandler (jsonE . fileO) $ doGet doGet :: ExceptT (Reason Void) Server (BL.ByteString, String, Bool) doGet = do state <- lift S.get return $ (clientHtml state, "client.html", False)