diff --git a/error.go b/error.go index 1a0d9e2..a5fcfbc 100644 --- a/error.go +++ b/error.go @@ -6,7 +6,6 @@ import ( "net/http" "os" - pb "github.com/unistack-org/micro-server-grpc/internal/errors" "github.com/unistack-org/micro/v3/errors" "google.golang.org/grpc/codes" ) @@ -64,8 +63,6 @@ func microError(err error) codes.Code { switch verr := err.(type) { case *errors.Error: ec = verr.Code - case *pb.Error: - ec = verr.Code } if code, ok := errMapping[ec]; ok { @@ -74,16 +71,3 @@ func microError(err error) codes.Code { return codes.Unknown } - -func pbError(err error) *pb.Error { - switch verr := err.(type) { - case nil: - return nil - case *errors.Error: - return &pb.Error{Id: verr.Id, Code: verr.Code, Detail: verr.Detail, Status: verr.Status} - case *pb.Error: - return verr - default: - return &pb.Error{Code: 500, Detail: err.Error()} - } -} diff --git a/errors_test.go b/errors_test.go deleted file mode 100644 index b32e008..0000000 --- a/errors_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package grpc_test - -import ( - "testing" - - pb "github.com/unistack-org/micro-server-grpc/internal/errors" - "google.golang.org/protobuf/types/known/anypb" -) - -func TestErrors(t *testing.T) { - any, err := anypb.New(&pb.Error{}) - if err != nil { - t.Fatal(err) - } - - t.Logf("srv any: %#+v\n", any) -} diff --git a/generate.go b/generate.go deleted file mode 100644 index 1bcd178..0000000 --- a/generate.go +++ /dev/null @@ -1,3 +0,0 @@ -package grpc - -//go:generate protoc -I./internal/errors -I. --go_out=paths=source_relative:./internal/errors internal/errors/server_errors.proto diff --git a/grpc.go b/grpc.go index 27c74fc..05be06a 100644 --- a/grpc.go +++ b/grpc.go @@ -15,7 +15,6 @@ import ( "time" oldproto "github.com/golang/protobuf/proto" - pberr "github.com/unistack-org/micro-server-grpc/internal/errors" "github.com/unistack-org/micro/v3/broker" "github.com/unistack-org/micro/v3/errors" "github.com/unistack-org/micro/v3/logger" @@ -456,22 +455,10 @@ func (g *grpcServer) processRequest(stream grpc.ServerStream, service *service, if appErr := fn(ctx, r, replyv.Interface()); appErr != nil { var errStatus *status.Status switch verr := appErr.(type) { - case *pberr.Error: - perr := pbError(verr) - statusCode = microError(verr) - statusDesc = verr.Error() - errStatus, err = status.New(statusCode, statusDesc).WithDetails(perr) - if err != nil { - return err - } case *errors.Error: - perr := pbError(verr) statusCode = microError(verr) statusDesc = verr.Error() - errStatus, err = status.New(statusCode, statusDesc).WithDetails(perr) - if err != nil { - return err - } + errStatus = status.New(statusCode, statusDesc) case oldproto.Message: // user defined error that proto based we can attach it to grpc status statusCode = convertCode(appErr) @@ -587,22 +574,10 @@ func (g *grpcServer) processStream(stream grpc.ServerStream, service *service, m var err error var errStatus *status.Status switch verr := appErr.(type) { - case *pberr.Error: - perr := pbError(verr) - statusCode = microError(verr) - statusDesc = verr.Error() - errStatus, err = status.New(statusCode, statusDesc).WithDetails(perr) - if err != nil { - return err - } case *errors.Error: - perr := pbError(verr) statusCode = microError(verr) statusDesc = verr.Error() - errStatus, err = status.New(statusCode, statusDesc).WithDetails(perr) - if err != nil { - return err - } + errStatus = status.New(statusCode, statusDesc) case oldproto.Message: // user defined error that proto based we can attach it to grpc status statusCode = convertCode(appErr) diff --git a/internal/errors/errors.go b/internal/errors/errors.go deleted file mode 100644 index 6dde75c..0000000 --- a/internal/errors/errors.go +++ /dev/null @@ -1,159 +0,0 @@ -package errors - -import ( - "fmt" -) - -func (e *Error) Error() string { - return fmt.Sprintf(`{"id":"%s","code":%d,"detail":"%s","status":"%s"}`, e.Id, e.Code, e.Detail, e.Status) -} - -// New generates a custom error. -func New(id, detail string, code int32) error { - return &Error{ - Id: id, - Code: code, - Detail: detail, - // Status: http.StatusText(int(code)), - } -} - -// BadRequest generates a 400 error. -func BadRequest(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 400, - Detail: fmt.Sprintf(format, a...), - // Status: http.StatusText(400), - } -} - -// Unauthorized generates a 401 error. -func Unauthorized(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 401, - Detail: fmt.Sprintf(format, a...), - // Status: http.StatusText(401), - } -} - -// Forbidden generates a 403 error. -func Forbidden(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 403, - Detail: fmt.Sprintf(format, a...), - // Status: http.StatusText(403), - } -} - -// NotFound generates a 404 error. -func NotFound(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 404, - Detail: fmt.Sprintf(format, a...), - // Status: http.StatusText(404), - } -} - -// MethodNotAllowed generates a 405 error. -func MethodNotAllowed(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 405, - Detail: fmt.Sprintf(format, a...), - //Status: http.StatusText(405), - } -} - -// Timeout generates a 408 error. -func Timeout(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 408, - Detail: fmt.Sprintf(format, a...), - //Status: http.StatusText(408), - } -} - -// Conflict generates a 409 error. -func Conflict(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 409, - Detail: fmt.Sprintf(format, a...), - //Status: http.StatusText(409), - } -} - -// InternalServerError generates a 500 error. -func InternalServerError(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 500, - Detail: fmt.Sprintf(format, a...), - //Status: http.StatusText(500), - } -} - -// NotImplemented generates a 501 error -func NotImplemented(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 501, - Detail: fmt.Sprintf(format, a...), - //Status: http.StatusText(501), - } -} - -// BadGateway generates a 502 error -func BadGateway(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 502, - Detail: fmt.Sprintf(format, a...), - // Status: http.StatusText(502), - } -} - -// ServiceUnavailable generates a 503 error -func ServiceUnavailable(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 503, - Detail: fmt.Sprintf(format, a...), - //Status: http.StatusText(503), - } -} - -// GatewayTimeout generates a 504 error -func GatewayTimeout(id, format string, a ...interface{}) error { - return &Error{ - Id: id, - Code: 504, - Detail: fmt.Sprintf(format, a...), - //Status: http.StatusText(504), - } -} - -// Equal tries to compare errors -func Equal(err1 error, err2 error) bool { - verr1, ok1 := err1.(*Error) - verr2, ok2 := err2.(*Error) - - if ok1 != ok2 { - return false - } - - if !ok1 { - return err1 == err2 - } - - if verr1.Code != verr2.Code { - return false - } - - return true -} diff --git a/internal/errors/server_errors.pb.go b/internal/errors/server_errors.pb.go deleted file mode 100644 index 8004840..0000000 --- a/internal/errors/server_errors.pb.go +++ /dev/null @@ -1,179 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.6.1 -// source: server_errors.proto - -package errors - -import ( - proto "github.com/golang/protobuf/proto" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -type Error struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` - Detail string `protobuf:"bytes,3,opt,name=detail,proto3" json:"detail,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` -} - -func (x *Error) Reset() { - *x = Error{} - if protoimpl.UnsafeEnabled { - mi := &file_server_errors_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Error) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Error) ProtoMessage() {} - -func (x *Error) ProtoReflect() protoreflect.Message { - mi := &file_server_errors_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Error.ProtoReflect.Descriptor instead. -func (*Error) Descriptor() ([]byte, []int) { - return file_server_errors_proto_rawDescGZIP(), []int{0} -} - -func (x *Error) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Error) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *Error) GetDetail() string { - if x != nil { - return x.Detail - } - return "" -} - -func (x *Error) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -var File_server_errors_proto protoreflect.FileDescriptor - -var file_server_errors_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x6f, 0x72, 0x67, 0x2e, 0x75, 0x6e, 0x69, 0x73, 0x74, - 0x61, 0x63, 0x6b, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, - 0x22, 0x5b, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x3b, 0x5a, - 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x6e, 0x69, 0x73, - 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2d, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_server_errors_proto_rawDescOnce sync.Once - file_server_errors_proto_rawDescData = file_server_errors_proto_rawDesc -) - -func file_server_errors_proto_rawDescGZIP() []byte { - file_server_errors_proto_rawDescOnce.Do(func() { - file_server_errors_proto_rawDescData = protoimpl.X.CompressGZIP(file_server_errors_proto_rawDescData) - }) - return file_server_errors_proto_rawDescData -} - -var file_server_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_server_errors_proto_goTypes = []interface{}{ - (*Error)(nil), // 0: org.unistack.micro.errors.Error -} -var file_server_errors_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_server_errors_proto_init() } -func file_server_errors_proto_init() { - if File_server_errors_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_server_errors_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Error); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_server_errors_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_server_errors_proto_goTypes, - DependencyIndexes: file_server_errors_proto_depIdxs, - MessageInfos: file_server_errors_proto_msgTypes, - }.Build() - File_server_errors_proto = out.File - file_server_errors_proto_rawDesc = nil - file_server_errors_proto_goTypes = nil - file_server_errors_proto_depIdxs = nil -} diff --git a/internal/errors/server_errors.proto b/internal/errors/server_errors.proto deleted file mode 100644 index bcb4bb1..0000000 --- a/internal/errors/server_errors.proto +++ /dev/null @@ -1,11 +0,0 @@ -syntax = "proto3"; - -option go_package = "github.com/unistack-org/micro-server-grpc/internal/errors"; -package org.unistack.micro.errors; - -message Error { - string id = 1; - int32 code = 2; - string detail = 3; - string status = 4; -};