I’ve added a few features to json2elm.
In addition to plain
elm/json decoders, it can now also generate applicative and pipeline decoders. It also generates the required imports based on the chosen decoder type. You can also choose between noun-based and verb-based function names for decoders and encoders.
Applicative decoders take advantage of the
andMap function from
elm-community/json-extra and look like this:
accountDecoder : Json.Decode.Decoder Account accountDecoder = Json.Decode.succeed Account |> Json.Decode.Extra.andMap (Json.Decode.field "id" Json.Decode.int) |> Json.Decode.Extra.andMap (Json.Decode.field "prefs" accountPrefsDecoder) |> Json.Decode.Extra.andMap (Json.Decode.field "user" accountUserDecoder)
Pipeline decoders rely on the
NoRedInk/elm-json-decode-pipeline package and look like this:
accountDecoder : Json.Decode.Decoder Account accountDecoder = Json.Decode.succeed Account |> Json.Decode.Pipeline.required "id" Json.Decode.int |> Json.Decode.Pipeline.required "prefs" accountPrefsDecoder |> Json.Decode.Pipeline.required "user" accountUserDecoder
I’ve also added imports to the generated code, so for example for pipeline decoders you will get a preamble like this:
import Json.Decode import Json.Encode import Json.Decode.Pipeline -- Required packages: -- * elm/json -- * NoRedInk/elm-json-decode-pipeline
Finally, there are two naming styles you can choose from for the functions: noun-based and verb-based. If you use nouns, you will get names like
encodeAccount when using verbs. I am partial to noun function names for the reason that in functional programs, we are describing what the transformations of the data are, rather than how they are done.