go-to-elm-json

command module
v0.1.0-alpha3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 8, 2023 License: MIT Imports: 11 Imported by: 0

README

go-to-elm-json

Build and Test Coverage Status

A tool to create Elm JSON decoder pipelines from Go struct type definitions.

Status

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

Install

go install github.com/jhillyerd/go-to-elm-json

Usage

go-to-elm-json <go source files> -- <package> <go type:elm name>

Example

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)
        ]

Contributing

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.

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL