github.com/s7techlab/cckit@v0.10.5/gateway/protoc-gen-cc-gateway/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "io" 6 "log" 7 "os" 8 9 "github.com/golang/protobuf/proto" 10 plugin "github.com/golang/protobuf/protoc-gen-go/plugin" 11 "github.com/grpc-ecosystem/grpc-gateway/codegenerator" 12 "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" 13 14 "github.com/s7techlab/cckit/gateway/protoc-gen-cc-gateway/generator" 15 ) 16 17 var ( 18 file = flag.String("file", "-", "where to load data from") 19 ) 20 21 func main() { 22 var err error 23 flag.Parse() 24 if err = flag.Lookup("logtostderr").Value.Set("true"); err != nil { 25 log.Fatal(err) 26 } 27 28 reg := descriptor.NewRegistry() 29 fs := os.Stdin 30 if *file != "-" { 31 if fs, err = os.Open(*file); err != nil { 32 log.Fatal(err) 33 } 34 } 35 req, err := codegenerator.ParseRequest(fs) 36 if err != nil { 37 log.Fatal(err) 38 } 39 40 if err = reg.Load(req); err != nil { 41 emitError(err) 42 return 43 } 44 45 g := generator.New(reg) 46 g.Opts = generator.OptsFromParams(req.GetParameter()) 47 48 var ( 49 targets []*descriptor.File 50 f *descriptor.File 51 ) 52 for _, target := range req.FileToGenerate { 53 if f, err = reg.LookupFile(target); err != nil { 54 log.Fatal(err) 55 } 56 targets = append(targets, f) 57 } 58 59 out, err := g.Generate(targets) 60 if err != nil { 61 emitError(err) 62 return 63 } 64 emitFiles(os.Stdout, out) 65 } 66 67 func emitFiles(w io.Writer, out []*plugin.CodeGeneratorResponse_File) { 68 emitResp(w, &plugin.CodeGeneratorResponse{File: out}) 69 } 70 71 func emitError(err error) { 72 emitResp(os.Stdout, &plugin.CodeGeneratorResponse{Error: proto.String(err.Error())}) 73 } 74 75 func emitResp(out io.Writer, resp *plugin.CodeGeneratorResponse) { 76 buf, err := proto.Marshal(resp) 77 if err != nil { 78 log.Fatal(err) 79 } 80 if _, err := out.Write(buf); err != nil { 81 log.Fatal(err) 82 } 83 }