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