Более 8 карт в формате ELM 0.19 - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть декодер флагов со значениями по умолчанию.

flagsDecoder : Decode.Decoder Params
flagsDecoder =
    Decode.map8 Params
        (Decode.field "field1" (Decode.string) |> (Decode.withDefault) "1")
        (Decode.field "field2" (Decode.string)   |> (Decode.withDefault) "2")
        (Decode.field "field3" (Decode.string)   |> (Decode.withDefault) "3")
        (Decode.field "field4" (Decode.string) |> (Decode.withDefault) "4)
        (Decode.field "field5" (Decode.string)  |> (Decode.withDefault) "5")
        (Decode.field "field6" (Decode.int) |> (Decode.withDefault) 6)
        (Decode.field "field7" (Decode.string)    |> (Decode.withDefault) "7")
        (Decode.field "field8" (Decode.string)   |> (Decode.withDefault) "8")

Как я могу добавить больше полей?У меня есть объект JSON с 10 полями.

1 Ответ

0 голосов
/ 21 декабря 2018

Я бы порекомендовал использовать andMap из elm-community/json-extra:

flagsDecoder : Decode.Decoder Params
flagsDecoder =
    Decode.succeed Params
        |> Decode.andMap (Decode.field "field1" (Decode.string) |> (Decode.withDefault) "1")
        |> Decode.andMap (Decode.field "field2" (Decode.string)   |> (Decode.withDefault) "2")
        |> Decode.andMap (Decode.field "field3" (Decode.string)   |> (Decode.withDefault) "3")
        |> Decode.andMap (Decode.field "field4" (Decode.string) |> (Decode.withDefault) "4")
        |> Decode.andMap (Decode.field "field5" (Decode.string)  |> (Decode.withDefault) "5")
        |> Decode.andMap (Decode.field "field6" (Decode.int) |> (Decode.withDefault) "6")
        |> Decode.andMap (Decode.field "field7" (Decode.string)    |> (Decode.withDefault) "7")
        |> Decode.andMap (Decode.field "field8" (Decode.string)   |> (Decode.withDefault) "8")

Но есть и другие варианты, такие как elm-json-decode-pipeline и новый экспериментальный API .andMap действительно прост и понятен, его можно использовать вместе с mapN и переключаться на него при необходимости.

...