Chapter 25: Rich Error Model and Error Details
Beyond Status Code + Message
gRPC status gives you a code and a string. For richer errors, use the error details mechanism (google.rpc.Status):
import "google/rpc/status.proto";
import "google/rpc/error_details.proto";
// Server: attach detailed error info
google::rpc::Status status;
status.set_code(google::rpc::INVALID_ARGUMENT);
status.set_message("validation failed");
google::rpc::BadRequest br;
auto* violation = br.add_field_violations();
violation->set_field("email");
violation->set_description("must be a valid email address");
status.add_details()->PackFrom(br);
// Sent in trailing metadata as grpc-status-details-bin
Standard Error Detail Types
BadRequest— field validation errorsRetryInfo— when to retry (retry_delay)QuotaFailure— which quota was exceededPreconditionFailure— what precondition failedResourceInfo— which resource caused the error