cvc/src/loreal.com/dit/cmd/ceh-cs-portal/restful/tag.go

59 lines
1.2 KiB
Go

package restful
import (
"log"
"reflect"
"strconv"
"strings"
)
//FieldTag - table field tag for restful models
type FieldTag struct {
Name string
FieldName string
DataType string
Default string
Index string
GoType reflect.Type
}
//ParseTags - Parse field tags from source struct
func ParseTags(source interface{}) []FieldTag {
t := reflect.TypeOf(source)
nFields := t.NumField()
r := make([]FieldTag, 0, nFields)
for i := 0; i < nFields; i++ {
field := t.Field(i)
r = append(r, FieldTag{
Name: field.Name,
FieldName: getTagStr(&field, "name", strings.ToLower(field.Name)),
DataType: getTagStr(&field, "type", "text"),
Default: getTagStr(&field, "default", ""),
Index: getTagStr(&field, "index", ""),
GoType: field.Type,
})
}
return r
}
func getTagInt(field *reflect.StructField, tagName string, defaultValue int) int {
v := field.Tag.Get(tagName)
if v == "" {
return defaultValue
}
intValue, err := strconv.Atoi(v)
if err != nil {
log.Fatalln(err)
return defaultValue
}
return intValue
}
func getTagStr(field *reflect.StructField, tagName string, defaultValue string) string {
v := field.Tag.Get(tagName)
if v == "" {
return defaultValue
}
return v
}