| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 
							- package jsonpb
 
- import (
 
- 	"bytes"
 
- 	"sync"
 
- 	"github.com/golang/protobuf/jsonpb"
 
- 	"github.com/golang/protobuf/proto"
 
- )
 
- var marshaller = &jsonpb.Marshaler{EmitDefaults: true, OrigName: true, EnumsAsInts: true}
 
- func Marshal(pb proto.Message) (string, error) {
 
- 	e := newEncodeState()
 
- 	if err := marshaller.Marshal(e, pb); err != nil {
 
- 		return "", err
 
- 	}
 
- 	s := e.String()
 
- 	e.Reset()
 
- 	encodeStatePool.Put(e)
 
- 	return s, nil
 
- }
 
- func MarshalBytes(pb proto.Message) ([]byte, error) {
 
- 	e := newEncodeState()
 
- 	if err := marshaller.Marshal(e, pb); err != nil {
 
- 		return nil, err
 
- 	}
 
- 	buf := append([]byte(nil), e.Bytes()...)
 
- 	e.Reset()
 
- 	encodeStatePool.Put(e)
 
- 	return buf, nil
 
- }
 
- // An encodeState encodes proto into a bytes.Buffer.
 
- type encodeState struct {
 
- 	*bytes.Buffer
 
- }
 
- var encodeStatePool sync.Pool
 
- func newEncodeState() *encodeState {
 
- 	if v := encodeStatePool.Get(); v != nil {
 
- 		e := v.(*encodeState)
 
- 		e.Reset()
 
- 		return e
 
- 	}
 
- 	return &encodeState{Buffer: bytes.NewBuffer(make([]byte, 0, 2048))}
 
- }
 
 
  |