added Aeson instances and JSON datatypes

This commit is contained in:
Dennis Frieberg 2020-08-29 15:26:40 +02:00
parent f41f84736a
commit dd2d653459
3 changed files with 62 additions and 3 deletions

View file

@ -22,6 +22,9 @@ description: Please see the README on GitHub at <https://github.com/gith
dependencies: dependencies:
- base >= 4.7 && < 5 - base >= 4.7 && < 5
- tickLeiste - tickLeiste
- aeson
- uuid
- text
library: library:
source-dirs: src source-dirs: src

View file

@ -0,0 +1,46 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Data.Aeson.TickLeiste
( KnownPlayer (..),
UnknownPlayer (..),
JSONRequest (..),
JSONEvent (..),
)
where
import Data.Aeson
import Data.Aeson.TH
import qualified Data.Text as T
import Data.TickLeiste
import qualified Data.UUID as U
$(deriveJSON defaultOptions {sumEncoding = defaultTaggedObject {tagFieldName = "tickType", contentsFieldName = "tickValue"}} ''Tick)
data KnownPlayer = KnownPlayer {kplayerUUID :: U.UUID, kplayerName :: Maybe T.Text}
deriving (Show)
$(deriveJSON defaultOptions {fieldLabelModifier = drop 1} ''KnownPlayer)
data UnknownPlayer = UnknownPlayer {uplayerName :: T.Text}
deriving (Show)
$(deriveJSON defaultOptions {fieldLabelModifier = drop 1} ''UnknownPlayer)
data JSONRequest
= SetPlayerTickR {sptRplayer :: KnownPlayer, sptRtick :: Tick}
| AddPladerTickR {aptRplayer :: UnknownPlayer, aptRtick :: Tick}
| InitializeTickLeisteR {itlRtickLeiste :: [(Tick, [UnknownPlayer])]}
| TickLeisteR
| ChangeNameR {cnaRplayer :: KnownPlayer}
deriving (Show)
$(deriveJSON defaultOptions {sumEncoding = defaultTaggedObject {tagFieldName = "requestType"}, fieldLabelModifier = drop 4} ''JSONRequest)
data JSONEvent
= SetPlayerTickE {sptEplayer :: KnownPlayer, sptEtick :: Tick}
| InitializeTickLeisteE {itlEtickLeiste :: [(Tick, [KnownPlayer])]}
| ChangeNameE {cnaEplayer :: KnownPlayer}
deriving (Show)
$(deriveJSON defaultOptions {sumEncoding = defaultTaggedObject {tagFieldName = "eventType"}, fieldLabelModifier = drop 4} ''JSONEvent)

View file

@ -25,14 +25,18 @@ source-repository head
library library
exposed-modules: exposed-modules:
Data.Aeson.TickLeiste
Lib Lib
other-modules: other-modules:
Paths_tickLeisteServer Paths_tickLeisteServer
hs-source-dirs: hs-source-dirs:
src src
build-depends: build-depends:
base >=4.7 && <5 aeson
, base >=4.7 && <5
, text
, tickLeiste , tickLeiste
, uuid
default-language: Haskell2010 default-language: Haskell2010
executable tickLeisteServer executable tickLeisteServer
@ -43,9 +47,12 @@ executable tickLeisteServer
app app
ghc-options: -threaded -rtsopts -with-rtsopts=-N ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: build-depends:
base >=4.7 && <5 aeson
, base >=4.7 && <5
, text
, tickLeiste , tickLeiste
, tickLeisteServer , tickLeisteServer
, uuid
default-language: Haskell2010 default-language: Haskell2010
test-suite tickLeisteServer-test test-suite tickLeisteServer-test
@ -57,7 +64,10 @@ test-suite tickLeisteServer-test
test test
ghc-options: -threaded -rtsopts -with-rtsopts=-N ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: build-depends:
base >=4.7 && <5 aeson
, base >=4.7 && <5
, text
, tickLeiste , tickLeiste
, tickLeisteServer , tickLeisteServer
, uuid
default-language: Haskell2010 default-language: Haskell2010