123456789101112131415161718192021222324252627282930313233343536373839 |
- package codegenerator
- import (
- "fmt"
- "io"
- "io/ioutil"
- "github.com/golang/protobuf/proto"
- plugin "github.com/golang/protobuf/protoc-gen-go/plugin"
- )
- // ParseRequest parses a code generator request from a proto Message.
- func ParseRequest(r io.Reader) (*plugin.CodeGeneratorRequest, error) {
- input, err := ioutil.ReadAll(r)
- if err != nil {
- return nil, fmt.Errorf("failed to read code generator request: %v", err)
- }
- req := new(plugin.CodeGeneratorRequest)
- if err = proto.Unmarshal(input, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal code generator request: %v", err)
- }
- return req, nil
- }
- // WriteResponse write a code generator response
- func WriteResponse(w io.Writer, files []*plugin.CodeGeneratorResponse_File, inErr error) error {
- var perrMsg *string
- if inErr != nil {
- errMsg := inErr.Error()
- perrMsg = &errMsg
- }
- resp := &plugin.CodeGeneratorResponse{Error: perrMsg, File: files}
- buf, err := proto.Marshal(resp)
- if err != nil {
- return err
- }
- _, err = w.Write(buf)
- return err
- }
|