35 lines
1020 B
Elm
35 lines
1020 B
Elm
module Go.Decoders exposing (..)
|
|
import Go.Types exposing (..)
|
|
import Go.Util exposing (pair)
|
|
import Json.Decode as Decode
|
|
import Json.Decode.Pipeline exposing (decode, required)
|
|
|
|
decodeIndex : Decode.Decoder Index
|
|
decodeIndex = decode pair
|
|
|> required "x" Decode.int
|
|
|> required "y" Decode.int
|
|
|
|
decodeColor : Decode.Decoder Color
|
|
decodeColor =
|
|
let
|
|
tryDecode : String -> Decode.Decoder Color
|
|
tryDecode s = case s of
|
|
"White" -> Decode.succeed White
|
|
"Black" -> Decode.succeed Black
|
|
_ -> Decode.fail "Invalid color"
|
|
in
|
|
Decode.andThen tryDecode Decode.string
|
|
|
|
decodeCell : Decode.Decoder Cell
|
|
decodeCell = decode pair
|
|
|> required "index" decodeIndex
|
|
|> required "color" decodeColor
|
|
|
|
decodeUpdate : Decode.Decoder Update
|
|
decodeUpdate = decode pair
|
|
|> required "turn" decodeColor
|
|
|> required "board" (Decode.list decodeCell)
|
|
|
|
decodeUpdateString : String -> Result String Update
|
|
decodeUpdateString = Decode.decodeString decodeUpdate
|