Add error string to C++

pull/13413/head
ncteisen 8 years ago
parent 6ce01dd6fa
commit 74c106eff3
  1. 6
      include/grpc++/impl/codegen/call.h
  2. 13
      include/grpc++/impl/codegen/status.h

@ -574,7 +574,7 @@ class CallOpClientRecvStatus {
op->data.recv_status_on_client.trailing_metadata = metadata_map_->arr(); op->data.recv_status_on_client.trailing_metadata = metadata_map_->arr();
op->data.recv_status_on_client.status = &status_code_; op->data.recv_status_on_client.status = &status_code_;
op->data.recv_status_on_client.status_details = &error_message_; op->data.recv_status_on_client.status_details = &error_message_;
op->data.recv_status_on_client.error_string = nullptr; op->data.recv_status_on_client.error_string = &error_string_;
op->flags = 0; op->flags = 0;
op->reserved = NULL; op->reserved = NULL;
} }
@ -591,14 +591,16 @@ class CallOpClientRecvStatus {
*recv_status_ = Status(static_cast<StatusCode>(status_code_), *recv_status_ = Status(static_cast<StatusCode>(status_code_),
grpc::string(GRPC_SLICE_START_PTR(error_message_), grpc::string(GRPC_SLICE_START_PTR(error_message_),
GRPC_SLICE_END_PTR(error_message_)), GRPC_SLICE_END_PTR(error_message_)),
binary_error_details); binary_error_details, grpc::string(error_string_));
g_core_codegen_interface->grpc_slice_unref(error_message_); g_core_codegen_interface->grpc_slice_unref(error_message_);
g_core_codegen_interface->gpr_free((void*)error_string_);
recv_status_ = nullptr; recv_status_ = nullptr;
} }
private: private:
MetadataMap* metadata_map_; MetadataMap* metadata_map_;
Status* recv_status_; Status* recv_status_;
const char* error_string_;
grpc_status_code status_code_; grpc_status_code status_code_;
grpc_slice error_message_; grpc_slice error_message_;
}; };

@ -46,6 +46,16 @@ class Status {
error_message_(error_message), error_message_(error_message),
binary_error_details_(error_details) {} binary_error_details_(error_details) {}
/// Construct an instance with \a code, \a error_message and
/// \a error_details. It is an error to construct an OK status with non-empty
/// \a error_message and/or \a error_details.
Status(StatusCode code, const grpc::string& error_message,
const grpc::string& error_details, const grpc::string& error_string)
: code_(code),
error_message_(error_message),
binary_error_details_(error_details),
error_string_(error_string) {}
// Pre-defined special status objects. // Pre-defined special status objects.
/// An OK pre-defined instance. /// An OK pre-defined instance.
static const Status& OK; static const Status& OK;
@ -59,6 +69,8 @@ class Status {
/// Return the (binary) error details. /// Return the (binary) error details.
// Usually it contains a serialized google.rpc.Status proto. // Usually it contains a serialized google.rpc.Status proto.
grpc::string error_details() const { return binary_error_details_; } grpc::string error_details() const { return binary_error_details_; }
/// Return the full fidelity error string, which includes all child errors.
grpc::string error_string() const { return error_string_; }
/// Is the status OK? /// Is the status OK?
bool ok() const { return code_ == StatusCode::OK; } bool ok() const { return code_ == StatusCode::OK; }
@ -72,6 +84,7 @@ class Status {
StatusCode code_; StatusCode code_;
grpc::string error_message_; grpc::string error_message_;
grpc::string binary_error_details_; grpc::string binary_error_details_;
grpc::string error_string_;
}; };
} // namespace grpc } // namespace grpc

Loading…
Cancel
Save