aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Sign.elm
blob: 44f23b83e4d1808f2b12a6c3e3f352618d23a904 (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
module Sign
  ( Operation(..)
  , decodeOperation
  , toServerCommunication
  ) where

import Json.Decode as Json
import Json.Decode exposing (Value, Decoder, (:=))
import Maybe

import ServerCommunication as SC

type Operation =
  NoOp
  | SignIn String
  | SignOut

decodeOperation : Value -> Operation
decodeOperation value =
  Json.decodeValue operationDecoder value
    |> Result.toMaybe
    |> Maybe.withDefault NoOp

toServerCommunication : Operation -> SC.Communication
toServerCommunication operation =
  case operation of
    NoOp -> SC.NoCommunication
    SignIn assertion -> SC.SignIn assertion
    SignOut -> SC.SignOut

operationDecoder : Decoder Operation
operationDecoder =
  ("operation" := Json.string) `Json.andThen` operationDecoderWithTag

operationDecoderWithTag : String -> Decoder Operation
operationDecoderWithTag operation =
  case operation of
    "SignIn" ->
      Json.map SignIn ("assertion" := Json.string)
    "SignOut" ->
      Json.succeed SignOut
    _ ->
      Json.succeed NoOp