in cmd/generate-fastjson/main.go [440:476]
func makeStructField(structType *types.Struct, i int) (structField, bool) {
fieldVar := structType.Field(i)
if !fieldVar.Exported() {
return structField{}, false
}
var omitempty bool
fieldName := fieldVar.Name()
jsonName := fieldName
fieldTag := reflect.StructTag(structType.Tag(i))
jsonTag, ok := fieldTag.Lookup("json")
if ok {
if jsonTag == "-" {
return structField{}, false
}
name := jsonTag
comma := strings.IndexRune(jsonTag, ',')
if comma >= 0 {
name = jsonTag[:comma]
switch jsonTag[comma+1:] {
case "": // special case for `json:"-,"`
case "omitempty":
omitempty = true
default:
panic("unhandled json tag: " + jsonTag)
}
}
if name != "" {
jsonName = name
}
}
return structField{
fieldName: fieldName,
jsonName: jsonName,
fieldType: fieldVar.Type(),
omitempty: omitempty,
}, true
}