Add lower camel case

This commit is contained in:
Brad Reed
2017-06-18 20:24:19 +01:00
parent 44c0351a5b
commit 60b8bcfe44
3 changed files with 31 additions and 0 deletions
+4
View File
@@ -24,6 +24,7 @@ type Generator struct {
NoStdMarshalers bool
SnakeCase bool
LowerCamelCase bool
OmitEmpty bool
OutName string
@@ -110,6 +111,9 @@ func (g *Generator) writeMain() (path string, err error) {
if g.SnakeCase {
fmt.Fprintln(f, " g.UseSnakeCase()")
}
if g.SnakeCase {
fmt.Fprintln(f, " g.UseLowerCamelCase()")
}
if g.OmitEmpty {
fmt.Fprintln(f, " g.OmitEmpty()")
}
+2
View File
@@ -18,6 +18,7 @@ import (
var buildTags = flag.String("build_tags", "", "build tags to add to generated file")
var snakeCase = flag.Bool("snake_case", false, "use snake_case names instead of CamelCase by default")
var lowerCamelCase = flag.Bool("lower_camel_case", false, "use lowerCamelCase names instead of CamelCase by default")
var noStdMarshalers = flag.Bool("no_std_marshalers", false, "don't generate MarshalJSON/UnmarshalJSON funcs")
var omitEmpty = flag.Bool("omit_empty", false, "omit empty fields by default")
var allStructs = flag.Bool("all", false, "generate marshaler/unmarshalers for all structs in a file")
@@ -59,6 +60,7 @@ func generate(fname string) (err error) {
PkgName: p.PkgName,
Types: p.StructNames,
SnakeCase: *snakeCase,
LowerCamelCase: *lowerCamelCase,
NoStdMarshalers: *noStdMarshalers,
OmitEmpty: *omitEmpty,
LeaveTemps: *leaveTemps,
+25
View File
@@ -11,6 +11,7 @@ import (
"strconv"
"strings"
"unicode"
"unicode/utf8"
)
const pkgWriter = "github.com/mailru/easyjson/jwriter"
@@ -99,6 +100,11 @@ func (g *Generator) UseSnakeCase() {
g.fieldNamer = SnakeCaseFieldNamer{}
}
// UseLowerCamelCase sets lowerCamelCase field naming strategy.
func (g *Generator) UseLowerCamelCase() {
g.fieldNamer = LowerCamelCaseFieldNamer{}
}
// NoStdMarshalers instructs not to generate standard MarshalJSON/UnmarshalJSON
// methods (only the custom interface).
func (g *Generator) NoStdMarshalers() {
@@ -374,6 +380,25 @@ func (DefaultFieldNamer) GetJSONFieldName(t reflect.Type, f reflect.StructField)
}
}
// LowerCamelCaseFieldNamer
type LowerCamelCaseFieldNamer struct {}
func lowerFirst(s string) string {
if s == "" {
return ""
}
r, n := utf8.DecodeRuneInString(s)
return string(unicode.ToLower(r)) + s[n:]
}
func (LowerCamelCaseFieldNamer) GetJSONFieldName(t reflect.Type, f reflect.StructField) string {
jsonName := strings.Split(f.Tag.Get("json"), ",")[0]
if jsonName != "" {
return jsonName
} else {
return lowerFirst(f.Name)
}
}
// SnakeCaseFieldNamer implements CamelCase to snake_case conversion for fields names.
type SnakeCaseFieldNamer struct{}