aboutsummaryrefslogtreecommitdiff
path: root/server/lib/Uplcg/Cards.hs
diff options
context:
space:
mode:
authorJasper Van der Jeugt2020-09-11 13:14:19 +0200
committerJasper Van der Jeugt2020-09-11 13:14:19 +0200
commitffedfd5274a3545f2bc53bba7aa7ec3b4388edf1 (patch)
tree6fd9a75df6169d6abf2cc60e5658e0311d4ff20d /server/lib/Uplcg/Cards.hs
parentafbd7912487499fab2b7ebcc42496f015460f4b3 (diff)
Add default card set
Diffstat (limited to 'server/lib/Uplcg/Cards.hs')
-rw-r--r--server/lib/Uplcg/Cards.hs39
1 files changed, 26 insertions, 13 deletions
diff --git a/server/lib/Uplcg/Cards.hs b/server/lib/Uplcg/Cards.hs
index d7d7659..b089574 100644
--- a/server/lib/Uplcg/Cards.hs
+++ b/server/lib/Uplcg/Cards.hs
@@ -1,13 +1,14 @@
+{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
module Uplcg.Cards
( Deck
- , CardSets
+ , CardSets (..)
, loadCardSets
) where
import qualified Data.Aeson.TH as Aeson
import qualified Data.HashMap.Strict as HMS
-import Data.Maybe (fromMaybe)
+import Data.Maybe (fromMaybe, listToMaybe)
import qualified Data.Text as T
import qualified Data.Vector as V
import qualified Data.Yaml as Yaml
@@ -16,27 +17,39 @@ import Uplcg.Messages
type Deck = T.Text
-type CardSets = HMS.HashMap Deck Cards
+data CardSets = CardSets
+ { csDefault :: Maybe Deck
+ , csCards :: HMS.HashMap Deck Cards
+ } deriving (Show)
data RawCardSet = RawCardSet
- { rcsEnabled :: Maybe Bool
+ { rcsDefault :: Maybe Bool
+ , rcsEnabled :: Maybe Bool
, rcsInclude :: Maybe (V.Vector T.Text)
, rcsBlack :: V.Vector T.Text
, rcsWhite :: V.Vector T.Text
- }
+ } deriving (Show)
Aeson.deriveFromJSON (defaultOptionsDropLower 3) ''RawCardSet
fromRawCardSets :: HMS.HashMap Deck RawCardSet -> CardSets
fromRawCardSets raws =
- HMS.map (\rcs ->
- let includes = V.mapMaybe (`HMS.lookup` raws) $
- fromMaybe V.empty $ rcsInclude rcs in
- Cards
- { cardsBlack = rcsBlack rcs <> V.concatMap rcsBlack includes
- , cardsWhite = rcsWhite rcs <> V.concatMap rcsWhite includes
- }) $
- HMS.filter (fromMaybe True . rcsEnabled) raws
+ CardSets {..}
+ where
+ csDefault = listToMaybe
+ [ deck
+ | (deck, RawCardSet {..}) <- HMS.toList raws
+ , fromMaybe False rcsDefault
+ ]
+ csCards =
+ HMS.map (\rcs ->
+ let includes = V.mapMaybe (`HMS.lookup` raws) $
+ fromMaybe V.empty $ rcsInclude rcs in
+ Cards
+ { cardsBlack = rcsBlack rcs <> V.concatMap rcsBlack includes
+ , cardsWhite = rcsWhite rcs <> V.concatMap rcsWhite includes
+ }) $
+ HMS.filter (fromMaybe True . rcsEnabled) raws
loadCardSets :: FilePath -> IO CardSets
loadCardSets path = fromRawCardSets <$> Yaml.decodeFileThrow path