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"