Skip to content

Commit b614e84

Browse files
kookseebaiyunhui
andauthored
Fix/update result (#10)
Co-authored-by: baiyunhui <[email protected]>
1 parent 0dcffb6 commit b614e84

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1219
-1050
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package internal
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/dave/jennifer/jen"
7+
"google.golang.org/protobuf/compiler/protogen"
8+
)
9+
10+
// GenerateFile generates a .errors.pb.go file containing service definitions.
11+
func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile {
12+
filename := file.GeneratedFilenamePrefix + ".pb.enum.go"
13+
genFile := jen.NewFile(string(file.GoPackageName))
14+
genFile.HeaderComment("Code generated by protoc-gen-go-sql. DO NOT EDIT.")
15+
genFile.HeaderComment("versions:")
16+
genFile.HeaderComment(fmt.Sprintf("- protoc-gen-go-enum %s", version))
17+
genFile.HeaderComment(fmt.Sprintf("- protoc %s", protocVersion(gen)))
18+
if file.Proto.GetOptions().GetDeprecated() {
19+
genFile.HeaderComment(fmt.Sprintf("%s is a deprecated file.", file.Desc.Path()))
20+
} else {
21+
genFile.HeaderComment(fmt.Sprintf("source: %s", file.Desc.Path()))
22+
}
23+
24+
genFile.Comment("This is a compile-time assertion to ensure that this generated file")
25+
genFile.Comment("is compatible with the grpc package it is being compiled against.")
26+
genFile.Comment("Requires gRPC-Go v1.32.0 or later.")
27+
genFile.Id("const _ =").Qual("google.golang.org/grpc", "SupportPackageIsVersion7")
28+
29+
g := gen.NewGeneratedFile(filename, file.GoImportPath)
30+
g.Skip()
31+
32+
var genEnum = func(enum *protogen.Enum) {
33+
genFile.
34+
Func().Id(enum.GoIdent.GoName + "Values").
35+
Params().
36+
Index().String().
37+
BlockFunc(func(group *jen.Group) {
38+
var codes []jen.Code
39+
for _, v := range enum.Values {
40+
codes = append(codes, jen.Lit(string(v.Desc.Name())))
41+
}
42+
group.Return(jen.Index().String().Values(codes...))
43+
})
44+
genFile.Line()
45+
46+
genFile.
47+
Func().
48+
Id(enum.GoIdent.GoName + "Decode").
49+
Params(jen.Id("name").String()).
50+
Id(enum.GoIdent.GoName).
51+
BlockFunc(func(group *jen.Group) {
52+
var codes []jen.Code
53+
for _, v := range enum.Values {
54+
codes = append(codes, jen.Lit(string(v.Desc.Name())))
55+
}
56+
group.Return(jen.Id(enum.GoIdent.GoName).Call(
57+
jen.Id(enum.GoIdent.GoName + "_value").Index(jen.Id("name"))))
58+
})
59+
genFile.Line()
60+
}
61+
62+
for _, enum := range file.Enums {
63+
g.Unskip()
64+
genEnum(enum)
65+
}
66+
67+
for _, msg := range file.Messages {
68+
for _, enum := range msg.Enums {
69+
g.Unskip()
70+
genEnum(enum)
71+
}
72+
}
73+
74+
g.P(genFile.GoString())
75+
return g
76+
}
77+
78+
func protocVersion(gen *protogen.Plugin) string {
79+
v := gen.Request.GetCompilerVersion()
80+
if v == nil {
81+
return "(unknown)"
82+
}
83+
var suffix string
84+
if s := v.GetSuffix(); s != "" {
85+
suffix = "-" + s
86+
}
87+
return fmt.Sprintf("v%d.%d.%d%s", v.GetMajor(), v.GetMinor(), v.GetPatch(), suffix)
88+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package internal
2+
3+
const version = "v0.0.1"

cmds/protoc-gen-go-enum/main.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import (
4+
"github.com/pubgo/funk/cmds/protoc-gen-go-enum/internal"
5+
"google.golang.org/protobuf/compiler/protogen"
6+
"google.golang.org/protobuf/types/pluginpb"
7+
)
8+
9+
func main() {
10+
protogen.Options{}.Run(func(gen *protogen.Plugin) error {
11+
gen.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL)
12+
13+
for _, f := range gen.Files {
14+
if !f.Generate {
15+
continue
16+
}
17+
18+
internal.GenerateFile(gen, f)
19+
}
20+
return nil
21+
})
22+
}

cmds/protoc-gen-go-errors/internal/gen.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,13 @@ func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.Generated
4545
g.Unskip()
4646

4747
for _, codeName := range m.Values {
48-
var name = strings.ToLower(fmt.Sprintf("%s.%s.%s",
48+
var name = strings.ToLower(fmt.Sprintf("%s.%s",
4949
file.Desc.Package(),
50-
"err_code",
5150
strcase.ToSnake(string(codeName.Desc.Name())),
5251
))
5352

5453
var statusName = "OK"
55-
if tag.DefaultCode != 0 {
54+
if tag.DefaultCode != 0 && int32(codeName.Desc.Number()) != 0 {
5655
statusName = tag.DefaultCode.String()
5756
}
5857

@@ -86,7 +85,10 @@ func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.Generated
8685
jen.Id("Name"): jen.Lit(name),
8786
jen.Id("BizCode"): jen.Lit(num),
8887
jen.Id("Reason"): jen.Lit(rr),
89-
}).Line()
88+
})
89+
genFile.Var().Id("_").Op("=").
90+
Qual("github.com/pubgo/funk/errors", "RegisterErrCodes").
91+
Call(jen.Id("ErrCode" + string(codeName.Desc.Name()))).Line()
9092
}
9193
}
9294

cmds/protoc-gen-go-sql/internal/gen.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.Generated
1515
genFile := jen.NewFile(string(file.GoPackageName))
1616
genFile.HeaderComment("Code generated by protoc-gen-go-sql. DO NOT EDIT.")
1717
genFile.HeaderComment("versions:")
18-
genFile.HeaderComment(fmt.Sprintf("- protoc-gen-lava-errors %s", version))
18+
genFile.HeaderComment(fmt.Sprintf("- protoc-gen-go-sql %s", version))
1919
genFile.HeaderComment(fmt.Sprintf("- protoc %s", protocVersion(gen)))
2020
if file.Proto.GetOptions().GetDeprecated() {
2121
genFile.HeaderComment(fmt.Sprintf("%s is a deprecated file.", file.Desc.Path()))

errors/aaa.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,24 @@ package errors
22

33
import (
44
"fmt"
5+
"google.golang.org/grpc/status"
56

67
json "github.com/goccy/go-json"
78
)
89

910
var _ json.Marshaler = (Tags)(nil)
1011
var _ fmt.Formatter = (Tags)(nil)
1112

13+
type Maps map[string]any
14+
15+
func (t Maps) Tags() Tags {
16+
var tags = make(Tags, 0, len(t))
17+
for k, v := range t {
18+
tags = append(tags, Tag{K: k, V: v})
19+
}
20+
return tags
21+
}
22+
1223
type Tags []Tag
1324

1425
func (t Tags) Format(f fmt.State, verb rune) {
@@ -54,15 +65,13 @@ type ErrAs interface {
5465
As(any) bool
5566
}
5667

57-
type Errors interface {
58-
Error
59-
Errors() []error
60-
Append(err ...error) error
61-
}
62-
6368
type Error interface {
6469
Kind() string
6570
Error() string
6671
String() string
6772
MarshalJSON() ([]byte, error)
6873
}
74+
75+
type GRPCStatus interface {
76+
GRPCStatus() *status.Status
77+
}

errors/err_code.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@ package errors
22

33
import (
44
"bytes"
5+
"errors"
56
"fmt"
67

78
json "github.com/goccy/go-json"
8-
99
"github.com/pubgo/funk/errors/internal"
1010
"github.com/pubgo/funk/generic"
1111
"github.com/pubgo/funk/proto/errorpb"
1212
"github.com/pubgo/funk/stack"
1313
)
1414

15+
func NewCodeErr(code *errorpb.ErrCode) error {
16+
if generic.IsNil(code) {
17+
return nil
18+
}
19+
20+
return &ErrWrap{
21+
caller: stack.Caller(1),
22+
err: &ErrCode{pb: code, err: errors.New(code.Reason)},
23+
}
24+
}
25+
1526
func WrapCode(err error, code *errorpb.ErrCode) error {
1627
if generic.IsNil(err) {
1728
return nil
@@ -23,7 +34,7 @@ func WrapCode(err error, code *errorpb.ErrCode) error {
2334

2435
return &ErrWrap{
2536
caller: stack.Caller(1),
26-
err: &ErrCode{pb: code, err: err},
37+
err: &ErrCode{pb: code, err: handleGrpcError(err)},
2738
}
2839
}
2940

errors/err_code_registry.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package errors
2+
3+
import (
4+
"fmt"
5+
"github.com/pubgo/funk/proto/errorpb"
6+
)
7+
8+
var codes = make(map[string]*errorpb.ErrCode)
9+
10+
func GetErrCodes() []*errorpb.ErrCode {
11+
var codeList []*errorpb.ErrCode
12+
for _, v := range codes {
13+
codeList = append(codeList, v)
14+
}
15+
return codeList
16+
}
17+
18+
func RegisterErrCodes(code *errorpb.ErrCode) error {
19+
if codes[code.Name] != nil {
20+
panic(fmt.Sprintf("code exists, code=%s", codes[code.Name]))
21+
}
22+
23+
codes[code.Name] = code
24+
return nil
25+
}

errors/err_msg.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@ package errors
22

33
import (
44
"bytes"
5+
"errors"
56
"fmt"
67

78
json "github.com/goccy/go-json"
8-
99
"github.com/pubgo/funk/errors/internal"
1010
"github.com/pubgo/funk/generic"
1111
"github.com/pubgo/funk/proto/errorpb"
1212
"github.com/pubgo/funk/stack"
1313
)
1414

15+
func NewMsgErr(msg *errorpb.ErrMsg) error {
16+
if generic.IsNil(msg) {
17+
return nil
18+
}
19+
20+
return &ErrWrap{
21+
caller: stack.Caller(1),
22+
err: &ErrMsg{pb: msg, err: errors.New(msg.Msg)},
23+
}
24+
}
25+
1526
func WrapMsg(err error, msg *errorpb.ErrMsg) error {
1627
if generic.IsNil(err) {
1728
return nil
@@ -23,7 +34,7 @@ func WrapMsg(err error, msg *errorpb.ErrMsg) error {
2334

2435
return &ErrWrap{
2536
caller: stack.Caller(1),
26-
err: &ErrMsg{pb: msg, err: err},
37+
err: &ErrMsg{pb: msg, err: handleGrpcError(err)},
2738
}
2839
}
2940

0 commit comments

Comments
 (0)