aboutsummaryrefslogtreecommitdiff
path: root/src/client/Model/InitResult.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/Model/InitResult.elm')
-rw-r--r--src/client/Model/InitResult.elm28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/client/Model/InitResult.elm b/src/client/Model/InitResult.elm
new file mode 100644
index 0000000..7ce0be2
--- /dev/null
+++ b/src/client/Model/InitResult.elm
@@ -0,0 +1,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"