| // Copyright 2018 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. |
| |
| // The protoc-gen-go binary is a protoc plugin to generate a Go protocol |
| // buffer package. |
| package main |
| |
| import ( |
| "strings" |
| |
| "google.golang.org/proto/protogen" |
| ) |
| |
| func main() { |
| protogen.Run(func(gen *protogen.Plugin) error { |
| for _, f := range gen.Files { |
| if !f.Generate { |
| continue |
| } |
| genFile(gen, f) |
| } |
| return nil |
| }) |
| } |
| |
| func genFile(gen *protogen.Plugin, f *protogen.File) { |
| g := gen.NewGeneratedFile(strings.TrimSuffix(f.Desc.GetName(), ".proto") + ".pb.go") |
| g.P("// Code generated by protoc-gen-go. DO NOT EDIT.") |
| g.P("// source: ", f.Desc.GetName()) |
| g.P() |
| g.P("package TODO") |
| g.P() |
| |
| for _, m := range f.Messages { |
| genMessage(gen, g, m) |
| } |
| |
| // TODO: Everything. |
| } |
| |
| func genMessage(gen *protogen.Plugin, g *protogen.GeneratedFile, m *protogen.Message) { |
| g.P("type ", m.GoIdent, " struct {") |
| g.P("}") |
| g.P() |
| |
| for _, nested := range m.Messages { |
| genMessage(gen, g, nested) |
| } |
| } |