aboutsummaryrefslogtreecommitdiff
path: root/src/client/Model/InitResult.elm
blob: 7ce0be26e4b12b630a591a0fd606e494fe1c9da4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
module Model.InitResult exposing
  ( InitResult(..)
  , initResultDecoder
  )

import Json.Decode as Decode exposing (Decoder)

import Model.Init exposing (Init, initDecoder)

type InitResult =
  InitEmpty
  | InitSuccess Init
  | InitError String

initResultDecoder : Decoder InitResult
initResultDecoder = (Decode.field "tag" Decode.string) |> Decode.andThen initResultDecoderWithTag

initResultDecoderWithTag : String -> Decoder InitResult
initResultDecoderWithTag tag =
  case tag of
    "InitEmpty" ->
      Decode.succeed InitEmpty
    "InitSuccess" ->
      Decode.map InitSuccess (Decode.field "contents" initDecoder)
    "InitError" ->
      Decode.map InitError (Decode.field "contents" Decode.string)
    _ ->
      Decode.fail <| "got " ++ tag ++ " for InitResult"