background/vendor/git.jiaxianghudong.com/go/utils/lua.go

107 lines
2.3 KiB
Go

package utils
import (
"strconv"
"strings"
"net/http"
)
// buildLuaResponse构造Lua响应结果
func BuildLuaResponse(m interface{}) string {
var ret string
if mm, ok := m.(map[interface{}]interface{}); ok {
for k, i := range mm {
vStr := ""
switch v := i.(type) {
case int:
vStr = strconv.Itoa(v)
case int8:
vStr = strconv.Itoa(int(v))
case int16:
vStr = strconv.Itoa(int(v))
case int32:
vStr = I64toA(int64(v))
case int64:
vStr = I64toA(v)
case uint:
vStr = UitoA(v)
case uint8:
vStr = UitoA(uint(v))
case uint16:
vStr = UitoA(uint(v))
case uint32:
vStr = Ui32toA(v)
case uint64:
vStr = Ui64toA(v)
case bool:
if v {
vStr = "true"
}
case []interface{}:
tmp := make(map[interface{}]interface{})
for kk, vv := range v {
tmp[kk] = vv
}
vStr = BuildLuaResponse(tmp)
case map[interface{}]interface{}:
vStr = BuildLuaResponse(v)
case map[string]string:
for ks, vs := range v {
vStr += `,` + ks + `=` + strings.Replace(vs, `"`, `\"`, -1)
}
vStr = "{" + Substr(vStr, 1) + "}"
case string:
vStr = `"` + strings.Replace(v, `"`, `\"`, -1) + `"`
default:
if vv, ok := v.(map[interface{}]interface{}); ok {
vStr = BuildLuaResponse(vv)
}
}
if vStr != "" {
switch v := k.(type) {
case int:
ret += `,[` + strconv.Itoa(v) + `]=` + vStr
case string:
ret += `,` + v + `=` + vStr
}
}
}
return "{" + Substr(ret, 1) + "}"
}
return "{}"
}
// outputLuaMsg 输出lua格式提示信息
func OutputLua(w http.ResponseWriter, m map[interface{}]interface{}) {
w.Write([]byte("return " + BuildLuaResponse(m)))
}
// outputLuaMsg 输出lua格式提示信息
func OutputLuaMsg(w http.ResponseWriter, msg string, code ...int) bool {
var c int = 120
if len(code) >= 1 {
c = code[0]
}
OutputLua(w, NewLuaResult(msg, c))
return c == 0
}
// outputLuaOk 输出lua格式成功信息
func OutputLuaOk(w http.ResponseWriter, msg string) {
OutputLuaMsg(w, msg, 0)
}
// 获取lua返回结果map
func NewLuaResult(params ...interface{}) map[interface{}]interface{} {
ret := make(map[interface{}]interface{})
if len(params) > 0 {
ret["msg"] = params[0]
if len(params) > 1 {
ret["status"] = params[1]
} else {
ret["status"] = 0
}
}
return ret
}