56 lines
1.6 KiB
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()
|
|
}
|