packages feed

diplomacy-server-0.1.0.0: Router.hs

{-|
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
    }