mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-17 16:12:42 +08:00
81 lines
1.3 KiB
Go
81 lines
1.3 KiB
Go
package structs
|
|
|
|
import (
|
|
"github.com/charlienet/go-mixed/json"
|
|
)
|
|
|
|
type optionFunc func(*option)
|
|
|
|
type option struct {
|
|
SkipFields []string
|
|
TagName string
|
|
DeepCopy bool
|
|
Omitempty bool
|
|
IgnoreEmpty bool
|
|
Ignore bool
|
|
NameConverter func(string) string
|
|
}
|
|
|
|
func TagName(name string) optionFunc {
|
|
return func(o *option) {
|
|
o.TagName = name
|
|
}
|
|
}
|
|
|
|
func IgnoreEmpty() optionFunc {
|
|
return func(o *option) {
|
|
o.IgnoreEmpty = true
|
|
}
|
|
}
|
|
|
|
func Omitempty() optionFunc {
|
|
return func(o *option) {
|
|
o.Omitempty = true
|
|
}
|
|
}
|
|
|
|
func DeepCopy() optionFunc {
|
|
return func(o *option) {
|
|
o.DeepCopy = true
|
|
}
|
|
}
|
|
|
|
func SkipField(field string) optionFunc {
|
|
return SkipFields([]string{field})
|
|
}
|
|
|
|
func SkipFields(fields []string) optionFunc {
|
|
return func(o *option) {
|
|
o.SkipFields = append(o.SkipFields, fields...)
|
|
}
|
|
}
|
|
|
|
func Lcfirst() optionFunc {
|
|
return func(o *option) {
|
|
o.NameConverter = json.Lcfirst
|
|
}
|
|
}
|
|
|
|
func Camel2Case() optionFunc {
|
|
return func(o *option) {
|
|
o.NameConverter = json.Camel2Case
|
|
}
|
|
}
|
|
|
|
func defaultOptions() option {
|
|
return option{
|
|
TagName: defaultTagName,
|
|
Ignore: true,
|
|
NameConverter: func(s string) string { return s },
|
|
}
|
|
}
|
|
|
|
func acquireOptions(opts []optionFunc) option {
|
|
o := defaultOptions()
|
|
for _, f := range opts {
|
|
f(&o)
|
|
}
|
|
|
|
return o
|
|
}
|