nps/lib/pb/pb.go
2022-01-23 17:30:38 +08:00

30 lines
712 B
Go

package pb
import (
"ehang.io/nps/lib/common"
"github.com/golang/protobuf/proto"
"github.com/pkg/errors"
"io"
)
// WriteMessage is used to write a message to writer
func WriteMessage(w io.Writer, message proto.Message) (int, error) {
b, err := proto.Marshal(message)
if err != nil {
return 0, errors.Wrap(err, "proto Marshal")
}
n, err := common.WriteLenBytes(w, b)
return n, err
}
// ReadMessage is used to read a message from reader
func ReadMessage(r io.Reader, message proto.Message) (int, error) {
message.Reset()
b := make([]byte, 4096)
n, err := common.ReadLenBytes(r, b)
if err != nil {
return 0, errors.Wrap(err, "read proto message")
}
return n, proto.Unmarshal(b[:n], message)
}