aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/DecodeFlags.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm/DecodeFlags.elm')
-rw-r--r--src/client/elm/DecodeFlags.elm54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/client/elm/DecodeFlags.elm b/src/client/elm/DecodeFlags.elm
new file mode 100644
index 0000000..5acc4f9
--- /dev/null
+++ b/src/client/elm/DecodeFlags.elm
@@ -0,0 +1,54 @@
+module DecodeFlags exposing (Flags, init)
+
+import Json.Decode exposing (Decoder, andThen, fail, string, succeed)
+import Json.Decode.Pipeline exposing (decode, required)
+import Model exposing (..)
+
+
+type alias Flags =
+ Json.Decode.Value
+
+
+init : Flags -> ( Model, Cmd msg )
+init flags =
+ case Json.Decode.decodeValue decodeUsers flags of
+ Ok user ->
+ ( Model user, Cmd.none )
+
+ Err err ->
+ Debug.crash err
+
+
+decodeUsers : Decoder (List User)
+decodeUsers =
+ Json.Decode.list decodeUser
+
+
+decodeUser : Decoder User
+decodeUser =
+ decode User
+ |> required "type" decodeUserType
+ |> required "value" string
+
+
+decodeUserType : Json.Decode.Decoder UserType
+decodeUserType =
+ string
+ |> andThen
+ (\s ->
+ case s of
+ "s" ->
+ succeed Student
+
+ "c" ->
+ succeed Class
+
+ "t" ->
+ succeed Teacher
+
+ "r" ->
+ succeed Room
+
+ _ ->
+ fail ("What the f*ck is " ++ s ++ "?")
+ )