github.com/zly-app/zapp@v1.3.3/pkg/serializer/serializer.go (about)

     1  package serializer
     2  
     3  import (
     4  	"io"
     5  
     6  	"go.uber.org/zap"
     7  
     8  	"github.com/zly-app/zapp/logger"
     9  )
    10  
    11  // 序列化器
    12  type ISerializer interface {
    13  	// 序列化
    14  	Marshal(a interface{}, w io.Writer) error
    15  	// 序列化
    16  	MarshalBytes(a interface{}) ([]byte, error)
    17  	// 反序列化
    18  	Unmarshal(r io.Reader, a interface{}) error
    19  	// 反序列化
    20  	UnmarshalBytes(data []byte, a interface{}) error
    21  }
    22  
    23  var serializers = map[string]ISerializer{
    24  	BaseSerializerName:             NewBaseSerializer(jsonIterStandard.Marshal, jsonIterStandard.Unmarshal),
    25  	BytesSerializerName:            bytesSerializer{},
    26  	JsonSerializerName:             jsonSerializer{},
    27  	JsonIterSerializerName:         jsonIterSerializer{},
    28  	JsonIterStandardSerializerName: jsonIterStandardSerializer{},
    29  	MsgPackSerializerName:          msgPackSerializer{},
    30  	YamlSerializerName:             yamlSerializer{},
    31  }
    32  
    33  // 注册序列化器, 重复注册会panic
    34  func RegistrySerializer(name string, c ISerializer, replace ...bool) {
    35  	if len(replace) == 0 || !replace[0] {
    36  		if _, ok := serializers[name]; ok {
    37  			logger.Log.Panic("Serializer重复注册", zap.String("name", name))
    38  		}
    39  	}
    40  	serializers[name] = c
    41  }
    42  
    43  // 获取序列化器
    44  func GetSerializer(name string) ISerializer {
    45  	c, ok := serializers[name]
    46  	if !ok {
    47  		logger.Log.Panic("试图获取未注册的序列化器", zap.String("name", name))
    48  	}
    49  	return c
    50  }
    51  
    52  // 尝试获取序列化器
    53  func TryGetSerializer(name string) (ISerializer, bool) {
    54  	c, ok := serializers[name]
    55  	return c, ok
    56  }