Status status = Status.newBuilder() .setCode(Code.INVALID_ARGUMENT.getNumber()) .setMessage("Required argument is empty.") .addDetails(Any.pack(DebugInfo.newBuilder().addStackEntries("This is a sample stack trace").build())) .build(); responseObserver.onError(StatusProto.toStatusRuntimeException(status));
debug_info = Google::Rpc::DebugInfo.new( stack_entries: ["1", "2"] , )
error_status = Google::Rpc::Status.new( code: 3, message: "msg", details: [Google::Protobuf::Any.pack(debug_info)] )
# no way for me to throw exception from error_status
debug_info_any = Google::Protobuf::Any.pack(
Google::Rpc::DebugInfo.new(
stack_entries: ["stack_entries 1", "stack_entries 2"],
)
)
rich_error = Google::Rpc::Status.new(
code: 1,
message: 'matching message',
details: [debug_info_any],
)
encoded_rich_error = Google::Rpc::Status.encode(rich_error)
raise GRPC::BadStatus.new(
GRPC::Core::StatusCodes::INVALID_ARGUMENT,
"invalid argument msg",
'grpc-status-details-bin' => encoded_rich_error)