{-|
Module :
Description :
Copyright : (c) Alexander Vieth, 2015
Licence : BSD3
Maintainer : aovieth@gmail.com
Stability : experimental
Portability : non-portable (GHC only)
-}
{-# LANGUAGE AutoDeriveTypeable #-}
module Router (
router
) where
import Control.Monad.Trans.Reader
import Rest
import Rest.Api
import Rest.Resource as R
import Resources.Game as Game
import Resources.Join as Join
import Resources.Start as Start
import Resources.Order as Order
import Resources.Advance as Advance
import Resources.Pause as Pause
import Resources.Metadata as Metadata
import Resources.Resolution as Resolution
import Resources.Client as Client
import Types.GameId
import Types.Server
router :: Router Server Server
router = root -/ client --/ game ---/ gameJoin
---/ gameStart
---/ gameOrder
---/ gameAdvance
---/ gamePause
---/ gameMetadata
---/ gameResolution
--/ admin
game :: Router (Server) (ReaderT GameId Server)
game = route Game.resource
gameJoin :: Router (ReaderT GameId Server) (ReaderT GameId Server)
gameJoin = route Join.resource
gameStart :: Router (ReaderT GameId Server) (ReaderT GameId Server)
gameStart = route Start.resource
gameOrder :: Router (ReaderT GameId Server) (ReaderT GameId Server)
gameOrder = route Order.resource
gameAdvance :: Router (ReaderT GameId Server) (ReaderT GameId Server)
gameAdvance = route Advance.resource
gamePause :: Router (ReaderT GameId Server) (ReaderT GameId Server)
gamePause = route Pause.resource
gameMetadata :: Router (ReaderT GameId Server) (ReaderT GameId Server)
gameMetadata = route Metadata.resource
gameResolution :: Router (ReaderT GameId Server) (ReaderT GameId Server)
gameResolution = route Resolution.resource
client :: Router Server Server
client = route Client.resource
admin :: Router (Server) (ReaderT GameId Server)
admin = route adminResource
adminResource :: Resource Server (ReaderT GameId Server) GameId Void Void
adminResource = mkResourceReader
{ R.name = "admin"
, R.schema = noListing $ unnamedSingle GameId
}