Files
open-im-server/pkg/apiresp/resp.go
T

59 lines
1.2 KiB
Go
Raw Normal View History

2023-02-27 18:21:41 +08:00
package apiresp
2023-03-14 16:13:00 +08:00
import (
2023-03-16 10:46:06 +08:00
"github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
2023-03-16 19:15:45 +08:00
"reflect"
2023-03-14 16:13:00 +08:00
)
2023-03-24 16:39:33 +08:00
type ApiResponse struct {
2023-02-27 18:21:41 +08:00
ErrCode int `json:"errCode"`
ErrMsg string `json:"errMsg"`
ErrDlt string `json:"errDlt"`
2023-03-14 16:13:00 +08:00
Data any `json:"data,omitempty"`
2023-02-27 18:21:41 +08:00
}
2023-03-17 09:40:45 +08:00
func isAllFieldsPrivate(v any) bool {
2023-03-16 19:15:45 +08:00
typeOf := reflect.TypeOf(v)
2023-03-24 17:43:52 +08:00
if typeOf == nil {
return false
}
2023-03-16 19:15:45 +08:00
if typeOf.Kind() == reflect.Ptr {
typeOf = typeOf.Elem()
}
if typeOf.Kind() != reflect.Struct {
return false
}
num := typeOf.NumField()
for i := 0; i < num; i++ {
2023-03-17 09:40:45 +08:00
c := typeOf.Field(i).Name[0]
if c >= 'A' && c <= 'Z' {
2023-03-16 19:15:45 +08:00
return false
}
}
return true
}
2023-03-24 17:36:36 +08:00
func ApiSuccess(data any) *ApiResponse {
2023-03-17 09:40:45 +08:00
if isAllFieldsPrivate(data) {
2023-03-24 16:39:33 +08:00
return &ApiResponse{}
2023-03-16 19:15:45 +08:00
}
2023-03-24 16:39:33 +08:00
return &ApiResponse{
2023-02-27 18:21:41 +08:00
Data: data,
}
}
2023-03-24 16:39:33 +08:00
func ParseError(err error) *ApiResponse {
2023-03-24 17:36:36 +08:00
if err == nil {
return ApiSuccess(nil)
}
2023-03-14 16:13:00 +08:00
unwrap := errs.Unwrap(err)
if codeErr, ok := unwrap.(errs.CodeError); ok {
2023-03-24 16:39:33 +08:00
resp := ApiResponse{ErrCode: codeErr.Code(), ErrMsg: codeErr.Msg(), ErrDlt: codeErr.Detail()}
2023-03-23 09:48:11 +08:00
if resp.ErrDlt == "" {
resp.ErrDlt = err.Error()
}
return &resp
2023-03-14 16:13:00 +08:00
}
2023-03-24 16:39:33 +08:00
return &ApiResponse{ErrCode: errs.ServerInternalError, ErrMsg: err.Error()}
2023-02-27 18:21:41 +08:00
}