multi-http-method-support

master
stevenzack 4 years ago committed by Kevin Wan
parent 5e007c1f9f
commit 3321ed3519

@ -13,6 +13,7 @@ var funcsMap = template.FuncMap{
"pathToFuncName": pathToFuncName,
"parseType": parseType,
"add": add,
"upperCase": upperCase,
}
func lowCamelCase(s string) string {
@ -69,3 +70,7 @@ func parseType(t string) string {
func add(a, i int) int {
return a + i
}
func upperCase(s string) string {
return strings.ToUpper(s)
}

@ -1,6 +1,7 @@
package ktgen
import (
"fmt"
"log"
"os"
"path/filepath"
@ -24,18 +25,18 @@ import java.net.URL
const val SERVER = "http://localhost:8080"
suspend fun apiPost(
suspend fun apiRequest(
method:String,
uri: String,
body: Any,
body: Any="",
onOk: ((String) -> Unit)? = null,
onFail: ((String) -> Unit)? = null,
eventually: (() -> Unit)? = null
) = withContext(Dispatchers.IO) {
val url = URL(SERVER + uri)
with(url.openConnection() as HttpURLConnection) {
requestMethod = "POST"
requestMethod = method
headerFields["Content-Type"] = listOf("Application/json")
val data = when (body) {
is String -> {
body
@ -60,33 +61,6 @@ suspend fun apiPost(
}
eventually?.invoke()
}
suspend fun apiGet(
uri: String,
onOk: ((String) -> Unit)? = null,
onFail: ((String) -> Unit)? = null,
eventually: (() -> Unit)? = null
) = withContext(Dispatchers.IO) {
val url = URL(SERVER + uri)
with(url.openConnection() as HttpURLConnection) {
requestMethod = "POST"
headerFields["Content-Type"] = listOf("Application/json")
val wr = OutputStreamWriter(outputStream)
wr.flush()
//response
BufferedReader(InputStreamReader(inputStream)).use {
val response = it.readText()
if (responseCode == 200) {
onOk?.invoke(response)
} else {
onFail?.invoke(response)
}
}
}
eventually?.invoke()
}
`
apiTemplate = `package {{with .Info}}{{.Title}}{{end}}
@ -98,14 +72,14 @@ object Api{
val {{with $item}}{{lowCamelCase .Name}}: {{parseType .Type}}{{end}}{{if ne $i (add $length -1)}},{{end}}{{end}}
){{end}}
{{with .Service}}
{{range .Routes}}suspend fun {{pathToFuncName .Path}}({{if ne .Method "get"}}
req:{{with .RequestType}}{{.Name}},{{end}}{{end}}
{{range .Routes}}suspend fun {{pathToFuncName .Path}}({{with .RequestType}}{{if ne .Name ""}}
req:{{.Name}},{{end}}{{end}}
onOk: (({{with .ResponseType}}{{.Name}}{{end}}) -> Unit)? = null,
onFail: ((String) -> Unit)? = null,
eventually: (() -> Unit)? = null
){
api{{if eq .Method "get"}}Get{{else}}Post{{end}}("{{.Path}}",{{if ne .Method "get"}}req,{{end}} onOk = {
onOk?.invoke(Gson().fromJson(it,{{with .ResponseType}}{{.Name}}{{end}}::class.java))
apiRequest("{{upperCase .Method}}","{{.Path}}",{{with .RequestType}}{{if ne .Name ""}}body=req,{{end}}{{end}} onOk = { {{with .ResponseType}}
onOk?.invoke({{if ne .Name ""}}Gson().fromJson(it,{{.Name}}::class.java){{end}}){{end}}
}, onFail = onFail, eventually =eventually)
}
{{end}}{{end}}
@ -119,6 +93,7 @@ func genBase(dir, pkg string, api *spec.ApiSpec) error {
}
path := filepath.Join(dir, "BaseApi.kt")
if _, e := os.Stat(path); e == nil {
fmt.Println("BaseApi.kt already exists, skipped it.")
return nil
}

Loading…
Cancel
Save