Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
0e902b1022 | |||
81bbbf55e6 | |||
c6caa0d3ac | |||
5ecc4986dd | |||
9ed1ca9a89 | |||
805b52cf8d |
@@ -1,4 +1,4 @@
|
|||||||
# `protoc-gen-micro`
|
# `protoc-gen-go-micro`
|
||||||
protobuf plugin to generate helper code for micro framework
|
protobuf plugin to generate helper code for micro framework
|
||||||
|
|
||||||
A generic **code**/script/data generator based on [Protobuf](https://developers.google.com/protocol-buffers/).
|
A generic **code**/script/data generator based on [Protobuf](https://developers.google.com/protocol-buffers/).
|
||||||
@@ -15,11 +15,12 @@ $> protoc --micro_out=debug=true,components="micro|http":. input.proto
|
|||||||
|
|
||||||
| Option | Default Value | Accepted Values | Description
|
| Option | Default Value | Accepted Values | Description
|
||||||
|-----------------------|---------------|---------------------------|-----------------------
|
|-----------------------|---------------|---------------------------|-----------------------
|
||||||
|
| `tag_path` | `.` | `any local path` | path contains generated protobuf code that needs to be tagged
|
||||||
| `debug` | *false* | `true` or `false` | if *true*, `protoc` will generate a more verbose output
|
| `debug` | *false* | `true` or `false` | if *true*, `protoc` will generate a more verbose output
|
||||||
| `components` | `micro` | `micro rpc http chi gorilla` | some values cant coexists like gorilla/chi or rpc/http, values must be concatinated with pipe symbol
|
| `components` | `micro` | `micro rpc http chi gorilla client server` | some values can't coexists like gorilla/chi or rpc/http, values must be concatinated with pipe symbol
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
* Install the **go** compiler and tools from https://golang.org/doc/install
|
* Install the **go** compiler and tools from https://golang.org/doc/install
|
||||||
* Install **protoc-gen-go**: `go get google.golang.org/protobuf/cmd/protoc-gen-go`
|
* Install **protoc-gen-go**: `go get google.golang.org/protobuf/cmd/protoc-gen-go`
|
||||||
* Install **protoc-gen-micro**: `go get github.com/unistack-org/protoc-gen-micro/v3`
|
* Install **protoc-gen-go-micro**: `go get github.com/unistack-org/protoc-gen-go-micro/v3`
|
||||||
|
8
ast.go
8
ast.go
@@ -20,6 +20,9 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (g *Generator) astGenerate(plugin *protogen.Plugin) error {
|
func (g *Generator) astGenerate(plugin *protogen.Plugin) error {
|
||||||
|
if g.tagPath == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
for _, file := range plugin.Files {
|
for _, file := range plugin.Files {
|
||||||
if !file.Generate {
|
if !file.Generate {
|
||||||
continue
|
continue
|
||||||
@@ -41,7 +44,10 @@ func (g *Generator) astGenerate(plugin *protogen.Plugin) error {
|
|||||||
if !ok {
|
if !ok {
|
||||||
mp = make(map[string]map[string]*structtag.Tags)
|
mp = make(map[string]map[string]*structtag.Tags)
|
||||||
}
|
}
|
||||||
nmp := make(map[string]*structtag.Tags)
|
nmp, ok := mp[message.GoIdent.GoName]
|
||||||
|
if !ok {
|
||||||
|
nmp = make(map[string]*structtag.Tags)
|
||||||
|
}
|
||||||
tags, err := structtag.Parse(opts.(string))
|
tags, err := structtag.Parse(opts.(string))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
3
chi.go
3
chi.go
@@ -30,7 +30,8 @@ func (g *Generator) chiGenerate(component string, plugin *protogen.Plugin) error
|
|||||||
}
|
}
|
||||||
gfile := plugin.NewGeneratedFile(gname, path)
|
gfile := plugin.NewGeneratedFile(gname, path)
|
||||||
|
|
||||||
gfile.P("// Code generated by protoc-gen-micro")
|
gfile.P("// Code generated by protoc-gen-go-micro. DO NOT EDIT.")
|
||||||
|
gfile.P("// protoc-gen-go-micro version: " + versionComment)
|
||||||
gfile.P("package ", file.GoPackageName)
|
gfile.P("package ", file.GoPackageName)
|
||||||
gfile.P()
|
gfile.P()
|
||||||
|
|
||||||
|
44
example/example.proto
Normal file
44
example/example.proto
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package example;
|
||||||
|
|
||||||
|
option go_package = "github.com/unistack-org/protoc-gen-go-micro/v3/example;examplepb";
|
||||||
|
|
||||||
|
import "tag/tag.proto";
|
||||||
|
import "api/annotations.proto";
|
||||||
|
import "openapiv2/annotations.proto";
|
||||||
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
service Example {
|
||||||
|
rpc Call(CallReq) returns (CallRsp) {
|
||||||
|
option (micro.openapiv2.openapiv2_operation) = {
|
||||||
|
operation_id: "Call";
|
||||||
|
responses: {
|
||||||
|
key: "default";
|
||||||
|
value: {
|
||||||
|
description: "Error response";
|
||||||
|
schema: {
|
||||||
|
json_schema: {
|
||||||
|
ref: ".example.Error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
option (micro.api.http) = { post: "/v1/example/call/{name}"; body: "*"; };
|
||||||
|
option (micro.api.micro_method) = { timeout: 5; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
message CallReq {
|
||||||
|
string name = 1 [(micro.tag.tags) = "xml:\",attr\"" ];
|
||||||
|
string req = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
message CallRsp {
|
||||||
|
string rsp = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
message Error {
|
||||||
|
string msg = 1;
|
||||||
|
};
|
2
go.mod
2
go.mod
@@ -1,4 +1,4 @@
|
|||||||
module github.com/unistack-org/protoc-gen-micro/v3
|
module github.com/unistack-org/protoc-gen-go-micro/v3
|
||||||
|
|
||||||
go 1.16
|
go 1.16
|
||||||
|
|
||||||
|
@@ -30,7 +30,8 @@ func (g *Generator) gorillaGenerate(component string, plugin *protogen.Plugin) e
|
|||||||
}
|
}
|
||||||
gfile := plugin.NewGeneratedFile(gname, path)
|
gfile := plugin.NewGeneratedFile(gname, path)
|
||||||
|
|
||||||
gfile.P("// Code generated by protoc-gen-micro")
|
gfile.P("// Code generated by protoc-gen-go-micro. DO NOT EDIT.")
|
||||||
|
gfile.P("// protoc-gen-go-micro version: " + versionComment)
|
||||||
gfile.P("package ", file.GoPackageName)
|
gfile.P("package ", file.GoPackageName)
|
||||||
gfile.P()
|
gfile.P()
|
||||||
|
|
||||||
|
3
http.go
3
http.go
@@ -20,7 +20,8 @@ func (g *Generator) httpGenerate(component string, plugin *protogen.Plugin, genC
|
|||||||
}
|
}
|
||||||
gfile := plugin.NewGeneratedFile(gname, path)
|
gfile := plugin.NewGeneratedFile(gname, path)
|
||||||
|
|
||||||
gfile.P("// Code generated by protoc-gen-micro")
|
gfile.P("// Code generated by protoc-gen-go-micro. DO NOT EDIT.")
|
||||||
|
gfile.P("// protoc-gen-go-micro version: " + versionComment)
|
||||||
gfile.P("// source: ", file.Proto.GetName())
|
gfile.P("// source: ", file.Proto.GetName())
|
||||||
gfile.P("package ", file.GoPackageName)
|
gfile.P("package ", file.GoPackageName)
|
||||||
gfile.P()
|
gfile.P()
|
||||||
|
2
main.go
2
main.go
@@ -13,7 +13,7 @@ var (
|
|||||||
flagDebug = flag.Bool("debug", false, "")
|
flagDebug = flag.Bool("debug", false, "")
|
||||||
flagStandalone = flag.Bool("standalone", false, "")
|
flagStandalone = flag.Bool("standalone", false, "")
|
||||||
flagComponents = flag.String("components", "micro|rpc|http|client|server", "")
|
flagComponents = flag.String("components", "micro|rpc|http|client|server", "")
|
||||||
flagTagPath = flag.String("tag_path", ".", "")
|
flagTagPath = flag.String("tag_path", "", "")
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
3
micro.go
3
micro.go
@@ -21,7 +21,8 @@ func (g *Generator) microGenerate(component string, plugin *protogen.Plugin, gen
|
|||||||
}
|
}
|
||||||
gfile := plugin.NewGeneratedFile(gname, path)
|
gfile := plugin.NewGeneratedFile(gname, path)
|
||||||
|
|
||||||
gfile.P("// Code generated by protoc-gen-micro")
|
gfile.P("// Code generated by protoc-gen-go-micro. DO NOT EDIT.")
|
||||||
|
gfile.P("// protoc-gen-go-micro version: " + versionComment)
|
||||||
gfile.P("// source: ", file.Proto.GetName())
|
gfile.P("// source: ", file.Proto.GetName())
|
||||||
gfile.P("package ", file.GoPackageName)
|
gfile.P("package ", file.GoPackageName)
|
||||||
gfile.P()
|
gfile.P()
|
||||||
|
3
rpc.go
3
rpc.go
@@ -20,7 +20,8 @@ func (g *Generator) rpcGenerate(component string, plugin *protogen.Plugin, genCl
|
|||||||
}
|
}
|
||||||
gfile := plugin.NewGeneratedFile(gname, path)
|
gfile := plugin.NewGeneratedFile(gname, path)
|
||||||
|
|
||||||
gfile.P("// Code generated by protoc-gen-micro")
|
gfile.P("// Code generated by protoc-gen-go-micro. DO NOT EDIT.")
|
||||||
|
gfile.P("// protoc-gen-go-micro version: " + versionComment)
|
||||||
gfile.P("// source: ", file.Proto.GetName())
|
gfile.P("// source: ", file.Proto.GetName())
|
||||||
gfile.P("package ", file.GoPackageName)
|
gfile.P("package ", file.GoPackageName)
|
||||||
gfile.P()
|
gfile.P()
|
||||||
|
@@ -17,4 +17,5 @@ var (
|
|||||||
microClientHttpPackage = protogen.GoImportPath("github.com/unistack-org/micro-client-http/v3")
|
microClientHttpPackage = protogen.GoImportPath("github.com/unistack-org/micro-client-http/v3")
|
||||||
timePackage = protogen.GoImportPath("time")
|
timePackage = protogen.GoImportPath("time")
|
||||||
deprecationComment = "// Deprecated: Do not use."
|
deprecationComment = "// Deprecated: Do not use."
|
||||||
|
versionComment = "v3.4.0"
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user