123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2010 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // protoc-gen-go is a plugin for the Google protocol buffer compiler to generate
- // Go code. Install it by building this program and making it accessible within
- // your PATH with the name:
- //
- // protoc-gen-go
- //
- // The 'go' suffix becomes part of the argument for the protocol compiler,
- // such that it can be invoked as:
- //
- // protoc --go_out=paths=source_relative:. path/to/file.proto
- //
- // This generates Go bindings for the protocol buffer defined by file.proto.
- // With that input, the output will be written to:
- //
- // path/to/file.pb.go
- //
- // See the README and documentation for protocol buffers to learn more:
- //
- // https://developers.google.com/protocol-buffers/
- package main
- import (
- "flag"
- "fmt"
- "strings"
- "github.com/golang/protobuf/internal/gengogrpc"
- gengo "google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo"
- "google.golang.org/protobuf/compiler/protogen"
- )
- func main() {
- var (
- flags flag.FlagSet
- plugins = flags.String("plugins", "", "list of plugins to enable (supported values: grpc)")
- importPrefix = flags.String("import_prefix", "", "prefix to prepend to import paths")
- )
- importRewriteFunc := func(importPath protogen.GoImportPath) protogen.GoImportPath {
- switch importPath {
- case "context", "fmt", "math":
- return importPath
- }
- if *importPrefix != "" {
- return protogen.GoImportPath(*importPrefix) + importPath
- }
- return importPath
- }
- protogen.Options{
- ParamFunc: flags.Set,
- ImportRewriteFunc: importRewriteFunc,
- }.Run(func(gen *protogen.Plugin) error {
- grpc := false
- for _, plugin := range strings.Split(*plugins, ",") {
- switch plugin {
- case "grpc":
- grpc = true
- case "":
- default:
- return fmt.Errorf("protoc-gen-go: unknown plugin %q", plugin)
- }
- }
- for _, f := range gen.Files {
- if !f.Generate {
- continue
- }
- g := gengo.GenerateFile(gen, f)
- if grpc {
- gengogrpc.GenerateFileContent(gen, f, g)
- }
- }
- gen.SupportedFeatures = gengo.SupportedFeatures
- return nil
- })
- }
|