A tool to create Elm JSON decoder pipelines from Go struct type definitions.
Useful, but not feature complete.
- Support basic types: string, int, float, bool
- CamelCase common acronyms
- Generate Elm record
- Generate decoder pipeline
- Generate encoder
- Usage example in README
- Support slice form of basic types
- Support for optional fields
- Support nested structs
- Support nullable pointer types
- Allow records to be renamed
- Handle
json:"-"
correctly - Specify module name
- Support for string-keyed basic type maps
go install github.com/jhillyerd/go-to-elm-json
go-to-elm-json <go source files> -- <package> <go type:elm name>
Given the file foo/bar.go
containing:
package foo
type UserJSON struct {
Name string `json:"name"`
UserID int `json:"userID"`
Friends []string `json:"friends"`
Enabled bool `json:"enabled"`
}
Running: go-to-elm-json foo/*.go -- foo UserJSON:User
will output:
module User exposing (User, decoder, encode)
import Json.Decode as D
import Json.Decode.Pipeline as P
import Json.Encode as E
type alias User =
{ name : String
, userId : Int
, friends : List String
, enabled : Bool
}
decoder : D.Decoder User
decoder =
D.succeed User
|> P.required "name" D.string
|> P.required "userID" D.int
|> P.required "friends" (D.list D.string)
|> P.required "enabled" D.bool
encode : User -> E.Value
encode r =
E.object
[ ("name", E.string r.name)
, ("userID", E.int r.userId)
, ("friends", (E.list E.string) r.friends)
, ("enabled", E.bool r.enabled)
]
PRs welcome, please:
- Base your work off of the
development
branch, and target pull requests to the same. - Run the unit tests before filing a PR.
make
will run tests and lint. - Include unit tests for your changes.