lamassu-server/lamassu-admin-elm/src/FieldSet/Rest.elm
2018-10-08 21:29:06 +02:00

95 lines
2.1 KiB
Elm

module FieldSet.Rest exposing (..)
import Json.Decode as D
import Json.Encode as E
import FieldSet.Types exposing (..)
fieldPasswordDecoder : Bool -> FieldValue
fieldPasswordDecoder present =
if present then
FieldPassword PasswordHidden
else
FieldPassword PasswordEmpty
badInt : D.Decoder Int
badInt =
D.oneOf [ D.int ]
fieldValueDecoder : String -> D.Decoder FieldValue
fieldValueDecoder fieldType =
case fieldType of
"string" ->
D.map FieldString D.string
"password" ->
D.map fieldPasswordDecoder D.bool
"integer" ->
D.map FieldInteger badInt
_ ->
D.fail ("Unsupported field type: " ++ fieldType)
fieldDecoder : D.Decoder Field
fieldDecoder =
(D.field "fieldType" D.string)
|> D.andThen
(\fieldType ->
D.map6 Field
(D.field "code" D.string)
(D.field "display" D.string)
(D.oneOf [ D.field "placeholder" D.string, D.succeed "" ])
(D.field "required" D.bool)
(D.field "value" (fieldValueDecoder fieldType))
(D.field "value" (fieldValueDecoder fieldType))
)
encodeFieldValue : FieldValue -> E.Value
encodeFieldValue fieldValue =
case fieldValue of
FieldString value ->
E.string value
FieldPassword value ->
case value of
Password s ->
E.string s
_ ->
E.null
FieldInteger value ->
E.int value
maybeString : Maybe String -> E.Value
maybeString maybeString =
case maybeString of
Nothing ->
E.null
Just s ->
E.string s
encodeField : Field -> Maybe E.Value
encodeField field =
if isDirty field then
Just
(E.object
[ ( "code", E.string field.code )
, ( "value", encodeFieldValue field.value )
]
)
else
Nothing
isDirty : Field -> Bool
isDirty field =
field.value /= field.loadedValue