1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-05-02 22:17:10 +08:00
Mainflux.mainflux/ui/src/JsonMF.elm
Darko Draskovic 64f154dcc9 Fix .dockerignore file by removing index.html (#725)
* Fix .dockerignore file by removing index.html

Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com>

* Add autogen main.js to .dockerignore

Signed-off-by: Darko Draskovic <darko.draskovic@gmail.com>
2019-04-21 20:10:24 +02:00

108 lines
2.4 KiB
Elm

-- Copyright (c) 2019
-- Mainflux
--
-- SPDX-License-Identifier: Apache-2.0
module JsonMF exposing (JsonValue(..), jsonValueDecoder, jsonValueEncoder, jsonValueToString, maybeJsonValueToJsonValue, maybeJsonValueToString, stringToJsonValue, stringToMaybeJsonValue)
import Json.Decode as D
import Json.Encode as E
-- JSONVALUE
type JsonValue
= ValueObject (List ( String, JsonValue ))
| ValueArray (List JsonValue)
| ValueString String
| ValueFloat Float
| ValueInt Int
| ValueBool Bool
| ValueNull
jsonValueDecoder : D.Decoder JsonValue
jsonValueDecoder =
D.oneOf
[ D.keyValuePairs (D.lazy (\_ -> jsonValueDecoder)) |> D.map ValueObject
, D.list (D.lazy (\_ -> jsonValueDecoder)) |> D.map ValueArray
, D.int |> D.map ValueInt
, D.float |> D.map ValueFloat
, D.bool |> D.map ValueBool
, D.string |> D.map ValueString
, D.null "" |> D.map (\_ -> ValueNull)
]
stringToJsonValue : String -> Result D.Error JsonValue
stringToJsonValue jsonString =
D.decodeString jsonValueDecoder jsonString
jsonValueEncoder : JsonValue -> E.Value
jsonValueEncoder json =
case json of
ValueObject dict ->
dict
|> List.map
(\( k, v ) ->
( k, jsonValueEncoder v )
)
|> E.object
ValueArray array ->
array
|> E.list jsonValueEncoder
ValueString str ->
E.string str
ValueFloat number ->
E.float number
ValueInt number ->
E.int number
ValueBool bool ->
E.bool bool
ValueNull ->
E.null
jsonValueToString : JsonValue -> String
jsonValueToString jsonValue =
jsonValue |> jsonValueEncoder |> E.encode 1
-- String -> Maybe JsonValue -> JsonValue
stringToMaybeJsonValue : String -> Maybe JsonValue
stringToMaybeJsonValue string =
case stringToJsonValue string of
Ok jsonValue ->
Just jsonValue
Err err ->
Just ValueNull
maybeJsonValueToJsonValue : Maybe JsonValue -> JsonValue
maybeJsonValueToJsonValue maybeJsonValue =
case maybeJsonValue of
Just jsonValue ->
jsonValue
Nothing ->
ValueNull
maybeJsonValueToString : Maybe JsonValue -> String
maybeJsonValueToString maybeJsonValue =
jsonValueToString (maybeJsonValueToJsonValue maybeJsonValue)