wrapper/object.go

148 lines
2.8 KiB
Go
Raw Normal View History

2023-06-01 18:35:45 +08:00
// Package wrapper ...
//
// Description : wrapper ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2023-06-01 18:33
package wrapper
2023-06-01 18:47:53 +08:00
import (
"encoding/json"
2023-06-02 16:40:22 +08:00
"errors"
"git.zhangdeman.cn/zhangdeman/util"
2023-06-01 18:47:53 +08:00
"reflect"
)
2023-06-01 18:35:45 +08:00
2023-06-01 18:47:53 +08:00
// ObjectData 对象类型, 支持 nil / Map / Struct
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:36 2023/6/1
func ObjectData(data interface{}) *ObjectType {
ot := &ObjectType{
2023-06-02 16:40:22 +08:00
source: data,
data: map[interface{}]interface{}{},
byteData: []byte{},
isValid: true,
invalidErr: errors.New("data is invalid"),
2023-06-01 18:47:53 +08:00
}
if nil == ot {
return ot
}
reflectType := reflect.TypeOf(data)
switch reflectType.Kind() {
case reflect.Map:
fallthrough
case reflect.Struct:
ot.byteData, _ = json.Marshal(ot.source)
default:
// 数据类型不是 nil / map / struct 质疑
ot.isValid = false
}
return ot
2023-06-01 18:35:45 +08:00
}
2023-06-01 18:47:53 +08:00
// ObjectType ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:38 2023/6/1
2023-06-01 18:35:45 +08:00
type ObjectType struct {
2023-06-02 16:40:22 +08:00
source interface{}
data map[interface{}]interface{}
byteData []byte
isValid bool
invalidErr error
2023-06-01 18:35:45 +08:00
}
// IsValid 是否有效对象数据
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:49 2023/6/1
func (ot *ObjectType) IsValid() bool {
return ot.isValid
}
// IsNil 是否为nil
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:50 2023/6/1
func (ot *ObjectType) IsNil() bool {
return ot.source == nil
}
// ToString 转字符串
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:51 2023/6/1
2023-06-02 16:40:22 +08:00
func (ot *ObjectType) ToString() StringResult {
if ot.IsNil() {
2023-06-02 16:40:22 +08:00
return StringResult{
Value: "nil",
Err: nil,
}
}
if !ot.IsValid() {
// 非法对象数据
2023-06-02 16:40:22 +08:00
return StringResult{
Value: "",
Err: errors.New("data is invalid"),
}
}
2023-06-02 16:40:22 +08:00
return StringResult{
Value: string(ot.byteData),
Err: nil,
}
}
// ToMapStringAny ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:17 2023/6/2
func (ot *ObjectType) ToMapStringAny() ObjectResult {
res := ObjectResult{
Value: map[string]interface{}{},
Err: nil,
}
if ot.IsNil() {
return res
}
res.Err = util.JSON.UnmarshalWithNumber(ot.byteData, &res.Value)
return res
}
2023-06-02 16:43:18 +08:00
// ToStruct ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:41 2023/6/2
func (ot *ObjectType) ToStruct(receiver interface{}) error {
if nil == receiver {
return errors.New("receiver is nil")
}
if ot.IsNil() {
return errors.New("data is nil")
}
return util.JSON.UnmarshalWithNumber(ot.byteData, receiver)
}
// ToStructIgnoreErr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:42 2023/6/2
func (ot *ObjectType) ToStructIgnoreErr(receiver interface{}) {
if nil == receiver {
return
}
if ot.IsNil() {
return
}
_ = util.JSON.UnmarshalWithNumber(ot.byteData, receiver)
}