Source File
status.go
Belonging Package
google.golang.org/grpc/status
/*** Copyright 2017 gRPC authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.**/// Package status implements errors returned by gRPC. These errors are// serialized and transmitted on the wire between server and client, and allow// for additional data to be transmitted via the Details field in the status// proto. gRPC service handlers should return an error created by this// package, and gRPC clients should expect a corresponding error to be// returned from the RPC call.//// This package upholds the invariants that a non-nil error may not// contain an OK code, and an OK code must result in a nil error.package statusimport (spb)// Status references google.golang.org/grpc/internal/status. It represents an// RPC status code, message, and details. It is immutable and should be// created with New, Newf, or FromProto.// https://godoc.org/google.golang.org/grpc/internal/statustype Status = status.Status// New returns a Status representing c and msg.func ( codes.Code, string) *Status {return status.New(, )}// Newf returns New(c, fmt.Sprintf(format, a...)).func ( codes.Code, string, ...any) *Status {return New(, fmt.Sprintf(, ...))}// Error returns an error representing c and msg. If c is OK, returns nil.func ( codes.Code, string) error {return New(, ).Err()}// Errorf returns Error(c, fmt.Sprintf(format, a...)).func ( codes.Code, string, ...any) error {return Error(, fmt.Sprintf(, ...))}// ErrorProto returns an error representing s. If s.Code is OK, returns nil.func ( *spb.Status) error {return FromProto().Err()}// FromProto returns a Status representing s.func ( *spb.Status) *Status {return status.FromProto()}// FromError returns a Status representation of err.//// - If err was produced by this package or implements the method `GRPCStatus()// *Status` and `GRPCStatus()` does not return nil, or if err wraps a type// satisfying this, the Status from `GRPCStatus()` is returned. For wrapped// errors, the message returned contains the entire err.Error() text and not// just the wrapped status. In that case, ok is true.//// - If err is nil, a Status is returned with codes.OK and no message, and ok// is true.//// - If err implements the method `GRPCStatus() *Status` and `GRPCStatus()`// returns nil (which maps to Codes.OK), or if err wraps a type// satisfying this, a Status is returned with codes.Unknown and err's// Error() message, and ok is false.//// - Otherwise, err is an error not compatible with this package. In this// case, a Status is returned with codes.Unknown and err's Error() message,// and ok is false.func ( error) ( *Status, bool) {if == nil {return nil, true}type interface{ () *Status }if , := .(); {:= .()if == nil {// Error has status nil, which maps to codes.OK. There// is no sensible behavior for this, so we turn it into// an error with codes.Unknown and discard the existing// status.return New(codes.Unknown, .Error()), false}return , true}varif errors.As(, &) {:= .()if == nil {// Error wraps an error that has status nil, which maps// to codes.OK. There is no sensible behavior for this,// so we turn it into an error with codes.Unknown and// discard the existing status.return New(codes.Unknown, .Error()), false}:= .Proto().Message = .Error()return status.FromProto(), true}return New(codes.Unknown, .Error()), false}// Convert is a convenience function which removes the need to handle the// boolean return value from FromError.func ( error) *Status {, := FromError()return}// Code returns the Code of the error if it is a Status error or if it wraps a// Status error. If that is not the case, it returns codes.OK if err is nil, or// codes.Unknown otherwise.func ( error) codes.Code {// Don't use FromError to avoid allocation of OK status.if == nil {return codes.OK}return Convert().Code()}// FromContextError converts a context error or wrapped context error into a// Status. It returns a Status with codes.OK if err is nil, or a Status with// codes.Unknown if err is non-nil and not a context error.func ( error) *Status {if == nil {return nil}if errors.Is(, context.DeadlineExceeded) {return New(codes.DeadlineExceeded, .Error())}if errors.Is(, context.Canceled) {return New(codes.Canceled, .Error())}return New(codes.Unknown, .Error())}
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64)