diff --git a/Makefile b/Makefile index f95598cb..d2e2177a 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ install-plugins: GO111MODULE=off go get github.com/gogo/protobuf/protoc-gen-gofast go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest + go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors/v2@latest npm install cargo install protoc-gen-prost-crate diff --git a/buf.gen.yaml b/buf.gen.yaml index d44c0ff2..cddb22e4 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -20,6 +20,10 @@ plugins: out: pkg opt: - paths=source_relative + - name: go-errors + out: pkg + opt: + - paths=source_relative #JS - remote: buf.build/protocolbuffers/plugins/js:v3.19.1-1 diff --git a/proto/buf.yaml b/proto/buf.yaml index 1a519456..fd185cd9 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -5,3 +5,6 @@ breaking: lint: use: - DEFAULT + ignore_only: + PACKAGE_VERSION_SUFFIX: + - errors/errors.proto \ No newline at end of file diff --git a/proto/errors/errors.proto b/proto/errors/errors.proto new file mode 100644 index 00000000..91e53022 --- /dev/null +++ b/proto/errors/errors.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; + +package errors; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/go-kratos/kratos/v2/errors;errors"; +option java_multiple_files = true; +option java_package = "com.github.kratos.errors"; +option objc_class_prefix = "KratosErrors"; + +message Error { + int32 code = 1; + string reason = 2; + string message = 3; + map metadata = 4; +} + +extend google.protobuf.EnumOptions { + int32 default_code = 1108; +} + +extend google.protobuf.EnumValueOptions { + int32 code = 1109; +} diff --git a/proto/librarian/sephirah/v1/errors.proto b/proto/librarian/sephirah/v1/errors.proto new file mode 100644 index 00000000..1ef8e06b --- /dev/null +++ b/proto/librarian/sephirah/v1/errors.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; + +package librarian.sephirah.v1; + +import "errors/errors.proto"; + +option csharp_namespace = "TuiHub.Protos.Librarian.Sephirah.V1"; +option go_package = "github.com/tuihub/librarian/sephirah;v1"; + +enum ErrorReason { + option (errors.default_code) = 500; + + ERROR_REASON_UNSPECIFIED = 0 [(errors.code) = 500]; + + ERROR_REASON_BAD_REQUEST = 1 [(errors.code) = 400]; + ERROR_REASON_UNAUTHORIZED = 2 [(errors.code) = 401]; + ERROR_REASON_FORBIDDEN = 3 [(errors.code) = 403]; + ERROR_REASON_NOT_FOUND = 4 [(errors.code) = 404]; + ERROR_REASON_METHOD_NOT_ALLOWED = 5 [(errors.code) = 405]; + ERROR_REASON_NOT_IMPLEMENTED = 6 [(errors.code) = 501]; + ERROR_REASON_BAD_GATEWAY = 7 [(errors.code) = 502]; +}