diff --git a/package.yaml b/package.yaml index a070828..2878a7a 100644 --- a/package.yaml +++ b/package.yaml @@ -22,6 +22,9 @@ description: Please see the README on GitHub at = 4.7 && < 5 - tickLeiste +- aeson +- uuid +- text library: source-dirs: src diff --git a/src/Data/Aeson/TickLeiste.hs b/src/Data/Aeson/TickLeiste.hs new file mode 100644 index 0000000..c9ca32d --- /dev/null +++ b/src/Data/Aeson/TickLeiste.hs @@ -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) diff --git a/tickLeisteServer.cabal b/tickLeisteServer.cabal index 02bad59..5650593 100644 --- a/tickLeisteServer.cabal +++ b/tickLeisteServer.cabal @@ -25,14 +25,18 @@ source-repository head library exposed-modules: + Data.Aeson.TickLeiste Lib other-modules: Paths_tickLeisteServer hs-source-dirs: src build-depends: - base >=4.7 && <5 + aeson + , base >=4.7 && <5 + , text , tickLeiste + , uuid default-language: Haskell2010 executable tickLeisteServer @@ -43,9 +47,12 @@ executable tickLeisteServer app ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: - base >=4.7 && <5 + aeson + , base >=4.7 && <5 + , text , tickLeiste , tickLeisteServer + , uuid default-language: Haskell2010 test-suite tickLeisteServer-test @@ -57,7 +64,10 @@ test-suite tickLeisteServer-test test ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: - base >=4.7 && <5 + aeson + , base >=4.7 && <5 + , text , tickLeiste , tickLeisteServer + , uuid default-language: Haskell2010