func (b *BytesMessage) Bytes() []byte {
	return b.data
}
Bytes is used to return native data
package interact
import (
	"encoding/json"
	"github.com/golang/protobuf/proto"
)
type Protocol string
const (
	ProtocolHTTP Protocol = "HTTP"
	ProtocolGRPC Protocol = "GRPC"
)
type Message interface {
	proto.Message
	json.Marshaler
	json.Unmarshaler
	proto.Marshaler
	Bytes() []byte
}
type Request struct {
	Protocol Protocol          `json:"protocol"`
	Method   string            `json:"method"`
	Host     string            `json:"host"`
	Path     string            `json:"path"`
	Header   map[string]string `json:"header"`
	Body     Message           `json:"body"`
}
type Response struct {
	Code    uint32            `json:"code"`
	Header  map[string]string `json:"header"`
	Body    Message           `json:"body"`
	Trailer map[string]string `json:"trailer"`
}
func NewDefaultResponse(request *Request) *Response {
	var code uint32
	switch request.Protocol {
	case ProtocolGRPC:
		code = 0
	case ProtocolHTTP:
		code = 1
	}
	return &Response{
		Code:    code,
		Header:  map[string]string{},
		Trailer: map[string]string{},
		Body:    NewBytesMessage(nil),
	}
}
type BytesMessage struct {
	data []byte
}
func NewBytesMessage(data []byte) Message {
	return &BytesMessage{
		data: data,
	}
}
func (b *BytesMessage) Reset() {}
func (b *BytesMessage) String() string {
	return string(b.data)
}
func (b *BytesMessage) ProtoMessage() {}
func (b *BytesMessage) Marshal() ([]byte, error) {
	return b.data, nil
}
func (b *BytesMessage) UnmarshalJSON(data []byte) error {
	b.data = data
	return nil
}
func (b *BytesMessage) MarshalJSON() ([]byte, error) {
	if len(b.data) == 0 {
		return []byte(`null`), nil
	}
	return b.data, nil
}