Files
CoqDecks/client/src/MassiveDecks/Models/Json/Decode.elm
T

113 lines
2.8 KiB
Elm

module MassiveDecks.Models.Json.Decode where
import Json.Decode exposing (..)
import MassiveDecks.Models.Game exposing (..)
import MassiveDecks.Models.Card exposing (..)
import MassiveDecks.Models.Player exposing (..)
lobbyAndHandDecoder : Decoder LobbyAndHand
lobbyAndHandDecoder = object2 LobbyAndHand
("lobby" := lobbyDecoder)
("hand" := handDecoder)
lobbyDecoder : Decoder Lobby
lobbyDecoder = object4 Lobby
("id" := string)
("config" := configDecoder)
("players" := (list playerDecoder))
(maybe ("round" := roundDecoder))
deckInfoDecoder : Decoder DeckInfo
deckInfoDecoder = object4 DeckInfo
("id" := string)
("name" := string)
("calls" := int)
("responses" := int)
configDecoder : Decoder Config
configDecoder = object1 Config
("decks" := (list deckInfoDecoder))
handDecoder : Decoder Hand
handDecoder = object1 Hand
("hand" := (list responseDecoder))
playerDecoder : Decoder Player
playerDecoder = object6 Player
("id" := playerIdDecoder)
("name" := string)
("status" := playerStatusDecoder)
("score" := int)
("disconnected" := bool)
("left" := bool)
playerStatusDecoder : Decoder Status
playerStatusDecoder = customDecoder (string) (\name -> Result.Ok (Maybe.withDefault NotPlayed (nameToStatus name)))
roundDecoder : Decoder Round
roundDecoder = object3 Round
("czar" := playerIdDecoder)
("call" := callDecoder)
("responses" := responsesDecoder)
responsesDecoder : Decoder Responses
responsesDecoder = customDecoder responsesTransportDecoder (\transport -> case transport.hidden of
Just val -> case transport.revealed of
Just _ -> Result.Err "Got both count and cards."
Nothing -> Result.Ok (Hidden val)
Nothing -> case transport.revealed of
Just val -> Result.Ok (Revealed val)
Nothing -> Result.Err "Got neither count nor cards."
)
responsesTransportDecoder : Decoder ResponsesTransport
responsesTransportDecoder = object2 ResponsesTransport
(maybe ("hidden" := int))
(maybe ("revealed" := revealedResponsesDecoder))
type alias ResponsesTransport =
{ hidden : Maybe Int
, revealed : Maybe RevealedResponses
}
revealedResponsesDecoder : Decoder RevealedResponses
revealedResponsesDecoder = object2 RevealedResponses
("cards" := list (list responseDecoder))
(maybe ("playedByAndWinner" := playedByAndWinnerDecoder))
playedByAndWinnerDecoder : Decoder PlayedByAndWinner
playedByAndWinnerDecoder = object2 PlayedByAndWinner
("playedBy" := list (playerIdDecoder))
("winner" := playerIdDecoder)
callDecoder : Decoder Call
callDecoder = list string
responseDecoder : Decoder Response
responseDecoder = string
playerIdDecoder : Decoder Id
playerIdDecoder = int
playerSecretDecoder : Decoder Secret
playerSecretDecoder = object2 Secret
("id" := playerIdDecoder)
("secret" := string)