opier/encode/api.go

56 lines
1.6 KiB
Go

package encode // import "udico.de/uditaren/opier/encode"
import (
"bytes"
"fmt"
"strings"
"udico.de/opier/openapi"
)
func (e Encoder) Api(server openapi.Server) string {
tBuf := bytes.Buffer{}
tBuf.WriteString(fmt.Sprintf("package %v\n\n", e.Package))
tBuf.WriteString(e.GeneratedHeader())
tBuf.WriteString("import (\n \"fmt\"\n \"net/url\"\n \"reflect\"\n \"strings\"\n)\n\n")
tBuf.WriteString(Comment(server.Description, 0))
tBuf.WriteString(fmt.Sprintf("const %v_OPENAPI_BASE string = \"%v\"\n\n", strings.ToUpper(e.Package), server.Url))
// replace func:
tBuf.WriteString("func replacePathParam(path *string, param string, value interface{}) {\n")
tBuf.WriteString(" *path = strings.ReplaceAll(*path, \"{\" + param + \"}\", fmt.Sprintf(\"%v\", value))\n")
tBuf.WriteString("}\n\n")
tBuf.WriteString(`// Join anything into a string
func joinIfArray(v interface{}) string {
tBuf := &strings.Builder{}
switch reflect.TypeOf(v).Kind() {
case reflect.Slice, reflect.Array:
s := reflect.ValueOf(v)
for i:=0;i<s.Len();i++ {
if i > 0 {
tBuf.WriteString(",")
}
tBuf.WriteString(fmt.Sprintf("%v", s.Index(i)))
}
default:
tBuf.WriteString(fmt.Sprintf("%v", v))
}
return tBuf.String()
}
func addQueryParameter(q *url.Values, k string, v interface{}) {
tHasValue := false
switch reflect.TypeOf(v).Kind() {
case reflect.Slice, reflect.Array:
s := reflect.ValueOf(v)
tHasValue = s.Len() > 0
default:
if v != nil {
tHasValue = !reflect.DeepEqual(v, reflect.Zero(reflect.TypeOf(v)).Interface())
}
}
if tHasValue {
q.Add("pageNumber", joinIfArray(v))
}
}
`)
return tBuf.String()
}