status: wrap status proto in a struct (#3556)

This commit is contained in:
Zou Nengren 2020-05-08 04:16:17 +08:00 committed by GitHub
parent 10ccd46359
commit 695df7e2f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 7 deletions

View File

@ -97,7 +97,7 @@ func (s *Status) Err() error {
if s.Code() == codes.OK {
return nil
}
return (*Error)(s.Proto())
return &Error{e: s.Proto()}
}
// WithDetails returns a new status with the provided details messages appended to the status.
@ -136,18 +136,19 @@ func (s *Status) Details() []interface{} {
return details
}
// Error is an alias of a status proto. It implements error and Status,
// Error wraps a pointer of a status proto. It implements error and Status,
// and a nil *Error should never be returned by this package.
type Error spb.Status
type Error struct {
e *spb.Status
}
func (e *Error) Error() string {
p := (*spb.Status)(e)
return fmt.Sprintf("rpc error: code = %s desc = %s", codes.Code(p.GetCode()), p.GetMessage())
return fmt.Sprintf("rpc error: code = %s desc = %s", codes.Code(e.e.GetCode()), e.e.GetMessage())
}
// GRPCStatus returns the Status represented by se.
func (e *Error) GRPCStatus() *Status {
return FromProto((*spb.Status)(e))
return FromProto(e.e)
}
// Is implements future error.Is functionality.
@ -157,5 +158,5 @@ func (e *Error) Is(target error) bool {
if !ok {
return false
}
return proto.Equal((*spb.Status)(e), (*spb.Status)(tse))
return proto.Equal(e.e, tse.e)
}