eeue56/json-to-elm

`original` decoder uses `Json.Decode.Pipeline` without importing it

Opened this issue · 1 comments

Thanks for a great service!

This JSON gives some funny results.

Test case

{"cpus":4
   ,"port":8080
   ,"localprefix":"localfolder"
   ,"name":"myjob"
   ,"hash":"edebf0f9966282ea565cf6e3b0cf1eff"
   ,"source-folder":"myfolder"
   ,"load-timestamp":1496932552590
}

Generated Elm code (as of 2017-06-09 from http://eeue56.github.io/json-to-elm/, toplevel alias "Job"):

import Json.Encode
import Json.Decode exposing (field)

type alias Job =
    { cpus : Int
    , port : Int
    , localprefix : String
    , name : String
    , hash : String
    , sourceFolder : String
    , loadTimestamp : Int
    }

decodeJob : Json.Decode.Decoder Job
decodeJob =
    Json.Decode.Pipeline.decode Job
        |> Json.Decode.Pipeline.required "cpus" (Json.Decode.int)
        |> Json.Decode.Pipeline.required "port" (Json.Decode.int)
        |> Json.Decode.Pipeline.required "localprefix" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "name" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "hash" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "sourceFolder" (Json.Decode.string)
        |> Json.Decode.Pipeline.required "loadTimestamp" (Json.Decode.int)

encodeJob : Job -> Json.Encode.Value
encodeJob record =
    Json.Encode.object
        [ ("cpus",  Json.Encode.int <| record.cpus)
        , ("port",  Json.Encode.int <| record.port)
        , ("localprefix",  Json.Encode.string <| record.localprefix)
        , ("name",  Json.Encode.string <| record.name)
        , ("hash",  Json.Encode.string <| record.hash)
        , ("sourceFolder",  Json.Encode.string <| record.sourceFolder)
        , ("loadTimestamp",  Json.Encode.int <| record.loadTimestamp)
        ]

Unexpected things

  1. The decoder uses Json.Decode.Pipeline without importing it
  2. The decoder uses a pipeline even if the setting says original

Walkaround

After adding import Json.Decode.Pipeline to the top of the file and running elm package install NoRedInk/elm-decode-pipeline, code compiles.

This was a problem for me too. It should not use pipeline when the original setting is active!