mirror of
https://github.com/linka-cloud/grpc.git
synced 2025-06-22 09:12:28 +00:00
service and client implements last grpc server and client interfaces, improved errors, add signals handling
This commit is contained in:
145
errors/errors.go
Normal file
145
errors/errors.go
Normal file
@ -0,0 +1,145 @@
|
||||
package errors
|
||||
|
||||
import (
|
||||
status2 "google.golang.org/genproto/googleapis/rpc/status"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"google.golang.org/protobuf/types/known/anypb"
|
||||
)
|
||||
|
||||
func InvalidArgument(err error) error {
|
||||
return status.Error(codes.InvalidArgument, err.Error())
|
||||
}
|
||||
func InvalidArgumentF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.InvalidArgument, msg, args...)
|
||||
}
|
||||
func InvalidArgumentD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.InvalidArgument, err, details...)
|
||||
}
|
||||
func DeadlineExceeded(err error) error {
|
||||
return status.Error(codes.DeadlineExceeded, err.Error())
|
||||
}
|
||||
func DeadlineExceededF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.DeadlineExceeded, msg, args...)
|
||||
}
|
||||
func DeadlineExceededD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.DeadlineExceeded, err, details...)
|
||||
}
|
||||
func NotFound(err error) error {
|
||||
return status.Error(codes.NotFound, err.Error())
|
||||
}
|
||||
func NotFoundF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.NotFound, msg, args...)
|
||||
}
|
||||
func NotFoundD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.NotFound, err, details...)
|
||||
}
|
||||
func AlreadyExists(err error) error {
|
||||
return status.Error(codes.AlreadyExists, err.Error())
|
||||
}
|
||||
func AlreadyExistsF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.AlreadyExists, msg, args...)
|
||||
}
|
||||
func AlreadyExistsD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.AlreadyExists, err, details...)
|
||||
}
|
||||
func PermissionDenied(err error) error {
|
||||
return status.Error(codes.PermissionDenied, err.Error())
|
||||
}
|
||||
func PermissionDeniedF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.PermissionDenied, msg, args...)
|
||||
}
|
||||
func PermissionDeniedD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.PermissionDenied, err, details...)
|
||||
}
|
||||
func ResourceExhausted(err error) error {
|
||||
return status.Error(codes.ResourceExhausted, err.Error())
|
||||
}
|
||||
func ResourceExhaustedF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.ResourceExhausted, msg, args...)
|
||||
}
|
||||
func ResourceExhaustedD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.ResourceExhausted, err, details...)
|
||||
}
|
||||
func FailedPrecondition(err error) error {
|
||||
return status.Error(codes.FailedPrecondition, err.Error())
|
||||
}
|
||||
func FailedPreconditionF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.FailedPrecondition, msg, args...)
|
||||
}
|
||||
func FailedPreconditionD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.FailedPrecondition, err, details...)
|
||||
}
|
||||
func Aborted(err error) error {
|
||||
return status.Error(codes.Aborted, err.Error())
|
||||
}
|
||||
func AbortedF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.Aborted, msg, args...)
|
||||
}
|
||||
func OutOfRange(err error) error {
|
||||
return status.Error(codes.OutOfRange, err.Error())
|
||||
}
|
||||
func OutOfRangeF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.OutOfRange, msg, args...)
|
||||
}
|
||||
func OutOfRangeD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.OutOfRange, err, details...)
|
||||
}
|
||||
func Unimplemented(err error) error {
|
||||
return status.Error(codes.Unimplemented, err.Error())
|
||||
}
|
||||
func UnimplementedF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.Unimplemented, msg, args...)
|
||||
}
|
||||
func UnimplementedD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.Unimplemented, err, details...)
|
||||
}
|
||||
func Internal(err error) error {
|
||||
return status.Error(codes.Internal, err.Error())
|
||||
}
|
||||
func InternalF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.Internal, msg, args...)
|
||||
}
|
||||
func InternalD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.Internal, err, details...)
|
||||
}
|
||||
func Unavailable(err error) error {
|
||||
return status.Error(codes.Unavailable, err.Error())
|
||||
}
|
||||
func UnavailableF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.Unavailable, msg, args...)
|
||||
}
|
||||
func UnavailableD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.Unavailable, err, details...)
|
||||
}
|
||||
func DataLoss(err error) error {
|
||||
return status.Error(codes.DataLoss, err.Error())
|
||||
}
|
||||
func DataLossF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.DataLoss, msg, args...)
|
||||
}
|
||||
func DataLossD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.DataLoss, err, details...)
|
||||
}
|
||||
func Unauthenticated(err error) error {
|
||||
return status.Error(codes.Unauthenticated, err.Error())
|
||||
}
|
||||
func UnauthenticatedF(msg string, args ...interface{}) error {
|
||||
return status.Errorf(codes.Unauthenticated, msg, args...)
|
||||
}
|
||||
func UnauthenticatedD(err error, details ...proto.Message) error {
|
||||
return statusErr(codes.Unauthenticated, err, details...)
|
||||
}
|
||||
func statusErr(code codes.Code, err error, details ...proto.Message) error {
|
||||
return status.FromProto(&status2.Status{Code: int32(code), Message: err.Error(), Details: makeDetails(details...)}).Err()
|
||||
}
|
||||
func makeDetails(m ...proto.Message) []*anypb.Any {
|
||||
var out []*anypb.Any
|
||||
for _, v := range m {
|
||||
if a, err := anypb.New(v); err == nil {
|
||||
out = append(out, a)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
Reference in New Issue
Block a user