opier/encode/enum.go

41 lines
1.1 KiB
Go

package encode // import "udico.de/uditaren/opier/encode"
import (
"bytes"
"fmt"
"strings"
"udico.de/opier/openapi"
)
func (e Encoder) Enum(name string, schema openapi.Schema) string {
tBuf := bytes.Buffer{}
tBuf.WriteString(fmt.Sprintf("package %v\n\n", e.Package))
tBuf.WriteString(e.GeneratedHeader())
if schema.Description != "" {
tDesc := strings.Split(strings.TrimSpace(schema.Description), "\n")
for _, tLine := range tDesc {
tBuf.WriteString(fmt.Sprintf("// %v\n", tLine))
}
}
tBuf.WriteString(fmt.Sprintf("type %v %v\n\n", name, schema.Type))
tBuf.WriteString(fmt.Sprintf("const (\n"))
firstRow := true
tNames, tLen := schema.EnumNames()
tLenName := len(name)
for k, v := range schema.Enum {
value := v
if schema.Type == "string" {
value = fmt.Sprintf("\"%v\"", v)
}
if firstRow {
tBuf.WriteString(fmt.Sprintf(" %[2]v_%-[4]*[1]v %v = %v\n", tNames[k], name, value, tLen))
firstRow = false
} else {
tBuf.WriteString(fmt.Sprintf(" %[2]v_%-[4]*[1]v %[5]*[6]v = %[3]v\n", tNames[k], name, value, tLen, tLenName, ""))
}
}
tBuf.WriteString(fmt.Sprintf(")\n"))
return tBuf.String()
}