decoder.go 701 字节
Newer Older
Y
Your Name 已提交
1 2 3 4 5
package response

import "errors"

var (
Y
Your Name 已提交
6
	//ErrorInvalidDecoder 非法Decoder
Y
Your Name 已提交
7 8
	ErrorInvalidDecoder = errors.New("invalid decoder")
)
Y
Your Name 已提交
9 10

//DecodeHandle 解码器
Y
Your Name 已提交
11 12
type DecodeHandle func(data []byte, v interface{}) error

Y
Your Name 已提交
13 14 15 16
//EncodeHandle 解码处理器
type EncodeHandle func(v interface{}, org []byte) ([]byte, error)

//Encoder 解码器
Y
Your Name 已提交
17
type Encoder interface {
Y
Your Name 已提交
18 19
	Encode(v interface{}, org []byte) ([]byte, error)
	ContentType() string
Y
Your Name 已提交
20 21
}

Y
Your Name 已提交
22 23
//Decode 解码
func Decode(data []byte, handle DecodeHandle) (*Response, error) {
Y
Your Name 已提交
24

Y
Your Name 已提交
25 26
	if handle == nil {
		return nil, ErrorInvalidDecoder
Y
Your Name 已提交
27 28 29
	}

	var v interface{}
Y
Your Name 已提交
30 31 32
	err := handle(data, &v)
	if err != nil {
		return nil, err
Y
Your Name 已提交
33 34 35
	}
	return &Response{
		Data: v,
Y
Your Name 已提交
36
	}, nil
Y
Your Name 已提交
37 38

}