You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sonic/util/gin.go

140 lines
4.2 KiB
Go

package util
import (
"context"
"fmt"
"strconv"
"github.com/gin-gonic/gin"
"github.com/go-sonic/sonic/util/xerr"
)
func GetClientIP(ctx context.Context) string {
ginCtx, ok := ctx.(*gin.Context)
if !ok {
return ""
}
return ginCtx.ClientIP()
}
func GetUserAgent(ctx context.Context) string {
ginCtx, ok := ctx.(*gin.Context)
if !ok {
return ""
}
return ginCtx.GetHeader("User-Agent")
}
func MustGetQueryString(ctx *gin.Context, key string) (string, error) {
str, ok := ctx.GetQuery(key)
if !ok || str == "" {
return "", xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
return str, nil
}
func MustGetQueryInt32(ctx *gin.Context, key string) (int32, error) {
str, ok := ctx.GetQuery(key)
if !ok {
return 0, xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
value, err := strconv.ParseInt(str, 10, 32)
if err != nil {
return 0, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return int32(value), nil
}
func MustGetQueryInt64(ctx *gin.Context, key string) (int64, error) {
str, ok := ctx.GetQuery(key)
if !ok {
return 0, xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
value, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return 0, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return value, nil
}
func MustGetQueryInt(ctx *gin.Context, key string) (int, error) {
str, ok := ctx.GetQuery(key)
if !ok {
return 0, xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
value, err := strconv.Atoi(str)
if err != nil {
return 0, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return value, nil
}
func MustGetQueryBool(ctx *gin.Context, key string) (bool, error) {
str, ok := ctx.GetQuery(key)
if !ok {
return false, xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
value, err := strconv.ParseBool(str)
if err != nil {
return false, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return value, nil
}
func GetQueryBool(ctx *gin.Context, key string, defaultValue bool) (bool, error) {
str, ok := ctx.GetQuery(key)
if !ok {
return defaultValue, nil
}
value, err := strconv.ParseBool(str)
if err != nil {
return false, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return value, nil
}
func ParamString(ctx *gin.Context, key string) (string, error) {
str := ctx.Param(key)
if str == "" {
return "", xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
return str, nil
}
func ParamInt32(ctx *gin.Context, key string) (int32, error) {
str := ctx.Param(key)
if str == "" {
return 0, xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
value, err := strconv.ParseInt(str, 10, 32)
if err != nil {
return 0, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return int32(value), nil
}
func ParamInt64(ctx *gin.Context, key string) (int64, error) {
str := ctx.Param(key)
if str == "" {
return 0, xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
value, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return 0, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return value, nil
}
func ParamBool(ctx *gin.Context, key string) (bool, error) {
str := ctx.Param(key)
if str == "" {
return false, xerr.WithStatus(nil, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("%s parameter does not exisit", key))
}
value, err := strconv.ParseBool(str)
if err != nil {
return false, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg(fmt.Sprintf("The parameter %s type is incorrect", key))
}
return value, nil
}