mirror of
https://github.com/opbnq-q/nto-cli.git
synced 2025-12-06 21:20:34 +07:00
feat: autoformatter
This commit is contained in:
81
entities/field_type.go
Normal file
81
entities/field_type.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package entities
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
var PrimitiveTypes = map[string]string{
|
||||
"date": "date",
|
||||
"number": "number",
|
||||
"string": "string",
|
||||
"multiple": "multiple",
|
||||
"boolean": "boolean",
|
||||
"bool": "boolean",
|
||||
"int": "number",
|
||||
"uint": "number",
|
||||
"float32": "number",
|
||||
"float64": "number",
|
||||
"int32": "number",
|
||||
"int64": "number",
|
||||
"uint32": "number",
|
||||
"uint64": "number",
|
||||
"int8": "number",
|
||||
"int16": "number",
|
||||
"uint8": "number",
|
||||
"uint16": "number",
|
||||
"byte": "number",
|
||||
"rune": "number",
|
||||
}
|
||||
|
||||
const typeTemplate = ` type: {
|
||||
{{ if .IsPrimitive }} primitive: "{{ .PrimitiveType }}",{{ else }} nested: {
|
||||
values: [],
|
||||
field: {{ .Field }}
|
||||
}, {{ end }}
|
||||
},`
|
||||
|
||||
type TypeTemplateContext struct {
|
||||
IsPrimitive bool
|
||||
PrimitiveType string
|
||||
Field string
|
||||
}
|
||||
|
||||
func (f *Field) GenerateType() string {
|
||||
keys := make([]string, 0, len(PrimitiveTypes))
|
||||
for k := range PrimitiveTypes {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
|
||||
var data TypeTemplateContext
|
||||
|
||||
if slices.Contains(keys, strings.ToLower(f.Type)) {
|
||||
data.IsPrimitive = true
|
||||
data.PrimitiveType = PrimitiveTypes[strings.ToLower(f.Type)]
|
||||
} else {
|
||||
data.IsPrimitive = false
|
||||
field := "[]"
|
||||
for _, meta := range f.Metadata {
|
||||
if meta.Name == "field" && len(meta.Values) > 0 {
|
||||
field = "['" + strings.Join(meta.Values, "', '") + "']"
|
||||
break
|
||||
}
|
||||
}
|
||||
data.Field = field
|
||||
}
|
||||
|
||||
tmpl, err := template.New("type").Parse(typeTemplate)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("Error parsing template: %v", err))
|
||||
}
|
||||
|
||||
var result bytes.Buffer
|
||||
if err := tmpl.Execute(&result, data); err != nil {
|
||||
panic(fmt.Sprintf("Error executing template: %v", err))
|
||||
}
|
||||
|
||||
return result.String()
|
||||
}
|
||||
Reference in New Issue
Block a user