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