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
|