diff --git a/cmd/protoc-gen-go-tableau-loader/code.go b/cmd/protoc-gen-go-tableau-loader/code.go deleted file mode 100644 index acfefeac..00000000 --- a/cmd/protoc-gen-go-tableau-loader/code.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "path/filepath" - - "google.golang.org/protobuf/compiler/protogen" -) - -const codePkg = "code" - -// generateCode generates related code files. -func generateCode(gen *protogen.Plugin) { - filename := filepath.Join(codePkg, "code."+pcExt+".go") - g := gen.NewGeneratedFile(filename, "") - generateCommonHeader(gen, g) - g.P() - g.P("package ", codePkg) - g.P() - g.P(staticCodeContent) - g.P() -} - -const staticCodeContent = `type Code int - -const ( - Success Code = iota - NotFound - Unknown -)` diff --git a/cmd/protoc-gen-go-tableau-loader/error.go b/cmd/protoc-gen-go-tableau-loader/error.go deleted file mode 100644 index 383e116e..00000000 --- a/cmd/protoc-gen-go-tableau-loader/error.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "path/filepath" - - "google.golang.org/protobuf/compiler/protogen" -) - -const errPkg = "xerrors" - -// generateError generates related error files. -func generateError(gen *protogen.Plugin) { - filename := filepath.Join(errPkg, "xerrors."+pcExt+".go") - g := gen.NewGeneratedFile(filename, "") - generateCommonHeader(gen, g) - g.P() - g.P("package ", errPkg) - g.P() - g.P(`import (`) - g.P(`"errors"`) - g.P(`"fmt"`) - g.P(codePackage) - g.P(")") - g.P(staticErrorContent) - g.P() -} - -const staticErrorContent = ` - -type Error struct { - code code.Code - cause error -} - -func (e *Error) Code() code.Code { - if e == nil { - return code.Success - } - return e.code -} - -func (e *Error) Error() string { - if e == nil { - return "" - } - return fmt.Sprintf("code: %d, cause: %+v", e.code, e.cause) -} - -func Errorf(code code.Code, format string, args ...interface{}) error { - return &Error{ - code: code, - cause: fmt.Errorf(format, args...), - } -} - -func Code(err error) code.Code { - if err == nil { - return code.Success - } - var e *Error - if errors.As(err, &e) { - return e.Code() - } - return code.Unknown -} - -func Is(err error, code code.Code) bool { - return Code(err) == code -}` diff --git a/cmd/protoc-gen-go-tableau-loader/errors.go b/cmd/protoc-gen-go-tableau-loader/errors.go new file mode 100644 index 00000000..52554f8d --- /dev/null +++ b/cmd/protoc-gen-go-tableau-loader/errors.go @@ -0,0 +1,26 @@ +package main + +import ( + "path/filepath" + + "google.golang.org/protobuf/compiler/protogen" +) + +// generateError generates related error files. +func generateError(gen *protogen.Plugin) { + filename := filepath.Join("errors." + pcExt + ".go") + g := gen.NewGeneratedFile(filename, "") + generateCommonHeader(gen, g) + g.P() + g.P("package ", *pkg) + g.P() + g.P(staticErrorContent) + g.P() +} + +const staticErrorContent = ` +import ( + "errors" +) + +var ErrNotFound = errors.New("not found")` diff --git a/cmd/protoc-gen-go-tableau-loader/main.go b/cmd/protoc-gen-go-tableau-loader/main.go index 1c65f716..642de7f8 100644 --- a/cmd/protoc-gen-go-tableau-loader/main.go +++ b/cmd/protoc-gen-go-tableau-loader/main.go @@ -37,7 +37,6 @@ func main() { } generateHub(gen) generateError(gen) - generateCode(gen) return nil }) } diff --git a/cmd/protoc-gen-go-tableau-loader/messager.go b/cmd/protoc-gen-go-tableau-loader/messager.go index ce18b262..5fd0f391 100644 --- a/cmd/protoc-gen-go-tableau-loader/messager.go +++ b/cmd/protoc-gen-go-tableau-loader/messager.go @@ -23,20 +23,16 @@ const ( pairPackage = protogen.GoImportPath("github.com/tableauio/loader/pkg/pair") timePackage = protogen.GoImportPath("time") sortPackage = protogen.GoImportPath("sort") + fmtPackage = protogen.GoImportPath("fmt") protoPackage = protogen.GoImportPath("google.golang.org/protobuf/proto") ) // golbal container for record all proto filenames and messager names var messagers []string -var errorsPackage protogen.GoImportPath -var codePackage protogen.GoImportPath // generateMessager generates a protoconf file corresponding to the protobuf file. // Each wrapped struct type implement the Messager interface. func generateMessager(gen *protogen.Plugin, file *protogen.File) { - errorsPackage = protogen.GoImportPath(string(file.GoImportPath) + "/" + *pkg + "/" + errPkg) - codePackage = protogen.GoImportPath(string(file.GoImportPath) + "/" + *pkg + "/" + codePkg) - filename := filepath.Join(file.GeneratedFilenamePrefix + "." + pcExt + ".go") g := gen.NewGeneratedFile(filename, "") generateFileHeader(gen, file, g) @@ -224,7 +220,7 @@ func genMapGetters(gen *protogen.Plugin, g *protogen.GeneratedFile, message *pro g.P("d := ", container, ".Get", field.GoName, "()") lastKeyName := keys[len(keys)-1].Name g.P("if val, ok := d[", lastKeyName, "]; !ok {") - g.P(`return `, returnEmptyValue, `, `, errorsPackage.Ident("Errorf"), `(`, codePackage.Ident("NotFound"), `, "`, lastKeyName, `(%v) not found", `, lastKeyName, `)`) + g.P(`return `, returnEmptyValue, `, `, fmtPackage.Ident("Errorf"), `("`, lastKeyName, `(%v) %w", `, lastKeyName, `, ErrNotFound)`) g.P("} else {") g.P(`return val, nil`) g.P("}") diff --git a/cmd/protoc-gen-go-tableau-loader/ordered_map.go b/cmd/protoc-gen-go-tableau-loader/ordered_map.go index 2c5d7cbe..707616ce 100644 --- a/cmd/protoc-gen-go-tableau-loader/ordered_map.go +++ b/cmd/protoc-gen-go-tableau-loader/ordered_map.go @@ -179,7 +179,7 @@ func genOrderedMapGetters(gen *protogen.Plugin, g *protogen.GeneratedFile, md pr keyName = fmt.Sprintf("BoolToInt(%s)", keyName) } g.P("if val, ok := conf.Get(", keyName, "); !ok {") - g.P(`return nil, `, errorsPackage.Ident("Errorf"), `(`, codePackage.Ident("NotFound"), `, "`, lastKeyName, `(%v) not found", `, lastKeyName, `)`) + g.P(`return nil, `, fmtPackage.Ident("Errorf"), `("`, lastKeyName, `(%v) %w", `, lastKeyName, `, ErrNotFound)`) g.P("} else {") g.P(`return val.First, nil`) g.P("}") diff --git a/test/go-tableau-loader/main.go b/test/go-tableau-loader/main.go index 52820135..329c6838 100644 --- a/test/go-tableau-loader/main.go +++ b/test/go-tableau-loader/main.go @@ -1,12 +1,12 @@ package main import ( + "errors" "fmt" "time" "github.com/tableauio/loader/test/go-tableau-loader/hub" - "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/code" - "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/xerrors" + "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader" "github.com/tableauio/tableau/format" "github.com/tableauio/tableau/load" "github.com/tableauio/tableau/store" @@ -33,7 +33,7 @@ func main() { // error: not found if _, err := conf.Get3(100001, 1, 999); err != nil { - if xerrors.Is(err, code.NotFound) { + if errors.Is(err, loader.ErrNotFound) { fmt.Println("error: not found:", err) } } diff --git a/test/go-tableau-loader/protoconf/loader/code/code.pc.go b/test/go-tableau-loader/protoconf/loader/errors.pc.go similarity index 68% rename from test/go-tableau-loader/protoconf/loader/code/code.pc.go rename to test/go-tableau-loader/protoconf/loader/errors.pc.go index b85d52fe..3d7d5848 100644 --- a/test/go-tableau-loader/protoconf/loader/code/code.pc.go +++ b/test/go-tableau-loader/protoconf/loader/errors.pc.go @@ -3,12 +3,10 @@ // - protoc-gen-go-tableau-loader v0.8.0 // - protoc v3.19.3 -package code +package loader -type Code int - -const ( - Success Code = iota - NotFound - Unknown +import ( + "errors" ) + +var ErrNotFound = errors.New("not found") diff --git a/test/go-tableau-loader/protoconf/loader/hero_conf.pc.go b/test/go-tableau-loader/protoconf/loader/hero_conf.pc.go index 81f4291e..b9b00332 100644 --- a/test/go-tableau-loader/protoconf/loader/hero_conf.pc.go +++ b/test/go-tableau-loader/protoconf/loader/hero_conf.pc.go @@ -7,12 +7,11 @@ package loader import ( + fmt "fmt" pair "github.com/tableauio/loader/pkg/pair" treemap "github.com/tableauio/loader/pkg/treemap" protoconf "github.com/tableauio/loader/test/go-tableau-loader/protoconf" base "github.com/tableauio/loader/test/go-tableau-loader/protoconf/base" - code "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/code" - xerrors "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/xerrors" format "github.com/tableauio/tableau/format" load "github.com/tableauio/tableau/load" store "github.com/tableauio/tableau/store" @@ -115,7 +114,7 @@ func (x *HeroConf) processAfterLoad() error { func (x *HeroConf) Get1(name string) (*protoconf.HeroConf_Hero, error) { d := x.Data().GetHeroMap() if val, ok := d[name]; !ok { - return nil, xerrors.Errorf(code.NotFound, "name(%v) not found", name) + return nil, fmt.Errorf("name(%v) %w", name, ErrNotFound) } else { return val, nil } @@ -130,7 +129,7 @@ func (x *HeroConf) Get2(name string, title string) (*protoconf.HeroConf_Hero_Att } d := conf.GetAttrMap() if val, ok := d[title]; !ok { - return nil, xerrors.Errorf(code.NotFound, "title(%v) not found", title) + return nil, fmt.Errorf("title(%v) %w", title, ErrNotFound) } else { return val, nil } @@ -259,7 +258,7 @@ func (x *HeroBaseConf) processAfterLoad() error { func (x *HeroBaseConf) Get1(name string) (*base.Hero, error) { d := x.Data().GetHeroMap() if val, ok := d[name]; !ok { - return nil, xerrors.Errorf(code.NotFound, "name(%v) not found", name) + return nil, fmt.Errorf("name(%v) %w", name, ErrNotFound) } else { return val, nil } @@ -274,7 +273,7 @@ func (x *HeroBaseConf) Get2(name string, id string) (*base.Item, error) { } d := conf.GetItemMap() if val, ok := d[id]; !ok { - return nil, xerrors.Errorf(code.NotFound, "id(%v) not found", id) + return nil, fmt.Errorf("id(%v) %w", id, ErrNotFound) } else { return val, nil } @@ -290,7 +289,7 @@ func (x *HeroBaseConf) GetOrderedMap() *ProtoconfHeroBaseConfHeroMap_OrderedMap func (x *HeroBaseConf) GetOrderedMap1(name string) (*BaseHeroItemMap_OrderedMap, error) { conf := x.orderedMap if val, ok := conf.Get(name); !ok { - return nil, xerrors.Errorf(code.NotFound, "name(%v) not found", name) + return nil, fmt.Errorf("name(%v) %w", name, ErrNotFound) } else { return val.First, nil } diff --git a/test/go-tableau-loader/protoconf/loader/item_conf.pc.go b/test/go-tableau-loader/protoconf/loader/item_conf.pc.go index 432f2d9b..c8169c91 100644 --- a/test/go-tableau-loader/protoconf/loader/item_conf.pc.go +++ b/test/go-tableau-loader/protoconf/loader/item_conf.pc.go @@ -7,10 +7,9 @@ package loader import ( + fmt "fmt" treemap "github.com/tableauio/loader/pkg/treemap" protoconf "github.com/tableauio/loader/test/go-tableau-loader/protoconf" - code "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/code" - xerrors "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/xerrors" format "github.com/tableauio/tableau/format" load "github.com/tableauio/tableau/load" store "github.com/tableauio/tableau/store" @@ -247,7 +246,7 @@ func (x *ItemConf) processAfterLoad() error { func (x *ItemConf) Get1(id uint32) (*protoconf.ItemConf_Item, error) { d := x.Data().GetItemMap() if val, ok := d[id]; !ok { - return nil, xerrors.Errorf(code.NotFound, "id(%v) not found", id) + return nil, fmt.Errorf("id(%v) %w", id, ErrNotFound) } else { return val, nil } diff --git a/test/go-tableau-loader/protoconf/loader/patch_conf.pc.go b/test/go-tableau-loader/protoconf/loader/patch_conf.pc.go index 51f4c4fa..fe045329 100644 --- a/test/go-tableau-loader/protoconf/loader/patch_conf.pc.go +++ b/test/go-tableau-loader/protoconf/loader/patch_conf.pc.go @@ -7,9 +7,8 @@ package loader import ( + fmt "fmt" protoconf "github.com/tableauio/loader/test/go-tableau-loader/protoconf" - code "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/code" - xerrors "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/xerrors" format "github.com/tableauio/tableau/format" load "github.com/tableauio/tableau/load" store "github.com/tableauio/tableau/store" @@ -160,7 +159,7 @@ func (x *PatchMergeConf) originalMessage() proto.Message { func (x *PatchMergeConf) Get1(id uint32) (*protoconf.Item, error) { d := x.Data().GetItemMap() if val, ok := d[id]; !ok { - return nil, xerrors.Errorf(code.NotFound, "id(%v) not found", id) + return nil, fmt.Errorf("id(%v) %w", id, ErrNotFound) } else { return val, nil } @@ -240,7 +239,7 @@ func (x *RecursivePatchConf) originalMessage() proto.Message { func (x *RecursivePatchConf) Get1(shopId uint32) (*protoconf.RecursivePatchConf_Shop, error) { d := x.Data().GetShopMap() if val, ok := d[shopId]; !ok { - return nil, xerrors.Errorf(code.NotFound, "shopId(%v) not found", shopId) + return nil, fmt.Errorf("shopId(%v) %w", shopId, ErrNotFound) } else { return val, nil } @@ -255,7 +254,7 @@ func (x *RecursivePatchConf) Get2(shopId uint32, goodsId uint32) (*protoconf.Rec } d := conf.GetGoodsMap() if val, ok := d[goodsId]; !ok { - return nil, xerrors.Errorf(code.NotFound, "goodsId(%v) not found", goodsId) + return nil, fmt.Errorf("goodsId(%v) %w", goodsId, ErrNotFound) } else { return val, nil } @@ -270,7 +269,7 @@ func (x *RecursivePatchConf) Get3(shopId uint32, goodsId uint32, type_ uint32) ( } d := conf.GetCurrencyMap() if val, ok := d[type_]; !ok { - return nil, xerrors.Errorf(code.NotFound, "type_(%v) not found", type_) + return nil, fmt.Errorf("type_(%v) %w", type_, ErrNotFound) } else { return val, nil } @@ -285,7 +284,7 @@ func (x *RecursivePatchConf) Get4(shopId uint32, goodsId uint32, type_ uint32, k } d := conf.GetValueList() if val, ok := d[key4]; !ok { - return 0, xerrors.Errorf(code.NotFound, "key4(%v) not found", key4) + return 0, fmt.Errorf("key4(%v) %w", key4, ErrNotFound) } else { return val, nil } diff --git a/test/go-tableau-loader/protoconf/loader/test_conf.pc.go b/test/go-tableau-loader/protoconf/loader/test_conf.pc.go index fbebbc1c..96cec9d8 100644 --- a/test/go-tableau-loader/protoconf/loader/test_conf.pc.go +++ b/test/go-tableau-loader/protoconf/loader/test_conf.pc.go @@ -7,11 +7,10 @@ package loader import ( + fmt "fmt" pair "github.com/tableauio/loader/pkg/pair" treemap "github.com/tableauio/loader/pkg/treemap" protoconf "github.com/tableauio/loader/test/go-tableau-loader/protoconf" - code "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/code" - xerrors "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/xerrors" format "github.com/tableauio/tableau/format" load "github.com/tableauio/tableau/load" store "github.com/tableauio/tableau/store" @@ -198,7 +197,7 @@ func (x *ActivityConf) processAfterLoad() error { func (x *ActivityConf) Get1(activityId uint64) (*protoconf.ActivityConf_Activity, error) { d := x.Data().GetActivityMap() if val, ok := d[activityId]; !ok { - return nil, xerrors.Errorf(code.NotFound, "activityId(%v) not found", activityId) + return nil, fmt.Errorf("activityId(%v) %w", activityId, ErrNotFound) } else { return val, nil } @@ -213,7 +212,7 @@ func (x *ActivityConf) Get2(activityId uint64, chapterId uint32) (*protoconf.Act } d := conf.GetChapterMap() if val, ok := d[chapterId]; !ok { - return nil, xerrors.Errorf(code.NotFound, "chapterId(%v) not found", chapterId) + return nil, fmt.Errorf("chapterId(%v) %w", chapterId, ErrNotFound) } else { return val, nil } @@ -228,7 +227,7 @@ func (x *ActivityConf) Get3(activityId uint64, chapterId uint32, sectionId uint3 } d := conf.GetSectionMap() if val, ok := d[sectionId]; !ok { - return nil, xerrors.Errorf(code.NotFound, "sectionId(%v) not found", sectionId) + return nil, fmt.Errorf("sectionId(%v) %w", sectionId, ErrNotFound) } else { return val, nil } @@ -243,7 +242,7 @@ func (x *ActivityConf) Get4(activityId uint64, chapterId uint32, sectionId uint3 } d := conf.GetSectionRankMap() if val, ok := d[key4]; !ok { - return 0, xerrors.Errorf(code.NotFound, "key4(%v) not found", key4) + return 0, fmt.Errorf("key4(%v) %w", key4, ErrNotFound) } else { return val, nil } @@ -259,7 +258,7 @@ func (x *ActivityConf) GetOrderedMap() *ProtoconfActivityConfActivityMap_Ordered func (x *ActivityConf) GetOrderedMap1(activityId uint64) (*ProtoconfActivityConfActivityChapterMap_OrderedMap, error) { conf := x.orderedMap if val, ok := conf.Get(activityId); !ok { - return nil, xerrors.Errorf(code.NotFound, "activityId(%v) not found", activityId) + return nil, fmt.Errorf("activityId(%v) %w", activityId, ErrNotFound) } else { return val.First, nil } @@ -273,7 +272,7 @@ func (x *ActivityConf) GetOrderedMap2(activityId uint64, chapterId uint32) (*Pro return nil, err } if val, ok := conf.Get(chapterId); !ok { - return nil, xerrors.Errorf(code.NotFound, "chapterId(%v) not found", chapterId) + return nil, fmt.Errorf("chapterId(%v) %w", chapterId, ErrNotFound) } else { return val.First, nil } @@ -287,7 +286,7 @@ func (x *ActivityConf) GetOrderedMap3(activityId uint64, chapterId uint32, secti return nil, err } if val, ok := conf.Get(sectionId); !ok { - return nil, xerrors.Errorf(code.NotFound, "sectionId(%v) not found", sectionId) + return nil, fmt.Errorf("sectionId(%v) %w", sectionId, ErrNotFound) } else { return val.First, nil } @@ -459,7 +458,7 @@ func (x *ChapterConf) originalMessage() proto.Message { func (x *ChapterConf) Get1(id uint64) (*protoconf.ChapterConf_Chapter, error) { d := x.Data().GetChapterMap() if val, ok := d[id]; !ok { - return nil, xerrors.Errorf(code.NotFound, "id(%v) not found", id) + return nil, fmt.Errorf("id(%v) %w", id, ErrNotFound) } else { return val, nil } @@ -539,7 +538,7 @@ func (x *ThemeConf) originalMessage() proto.Message { func (x *ThemeConf) Get1(name string) (*protoconf.ThemeConf_Theme, error) { d := x.Data().GetThemeMap() if val, ok := d[name]; !ok { - return nil, xerrors.Errorf(code.NotFound, "name(%v) not found", name) + return nil, fmt.Errorf("name(%v) %w", name, ErrNotFound) } else { return val, nil } @@ -554,7 +553,7 @@ func (x *ThemeConf) Get2(name string, param string) (string, error) { } d := conf.GetParamMap() if val, ok := d[param]; !ok { - return "", xerrors.Errorf(code.NotFound, "param(%v) not found", param) + return "", fmt.Errorf("param(%v) %w", param, ErrNotFound) } else { return val, nil } @@ -662,7 +661,7 @@ func (x *TaskConf) processAfterLoad() error { func (x *TaskConf) Get1(id int64) (*protoconf.TaskConf_Task, error) { d := x.Data().GetTaskMap() if val, ok := d[id]; !ok { - return nil, xerrors.Errorf(code.NotFound, "id(%v) not found", id) + return nil, fmt.Errorf("id(%v) %w", id, ErrNotFound) } else { return val, nil } diff --git a/test/go-tableau-loader/protoconf/loader/xerrors/xerrors.pc.go b/test/go-tableau-loader/protoconf/loader/xerrors/xerrors.pc.go deleted file mode 100644 index 22daecbb..00000000 --- a/test/go-tableau-loader/protoconf/loader/xerrors/xerrors.pc.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by protoc-gen-go-tableau-loader. DO NOT EDIT. -// versions: -// - protoc-gen-go-tableau-loader v0.8.0 -// - protoc v3.19.3 - -package xerrors - -import ( - "errors" - "fmt" - "github.com/tableauio/loader/test/go-tableau-loader/protoconf/loader/code" -) - -type Error struct { - code code.Code - cause error -} - -func (e *Error) Code() code.Code { - if e == nil { - return code.Success - } - return e.code -} - -func (e *Error) Error() string { - if e == nil { - return "" - } - return fmt.Sprintf("code: %d, cause: %+v", e.code, e.cause) -} - -func Errorf(code code.Code, format string, args ...interface{}) error { - return &Error{ - code: code, - cause: fmt.Errorf(format, args...), - } -} - -func Code(err error) code.Code { - if err == nil { - return code.Success - } - var e *Error - if errors.As(err, &e) { - return e.Code() - } - return code.Unknown -} - -func Is(err error, code code.Code) bool { - return Code(err) == code -}