diff --git a/bdchain/api/error_details.proto b/bdchain/api/error_details.proto new file mode 100644 index 0000000..030102c --- /dev/null +++ b/bdchain/api/error_details.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; + +package bdchain.api; + +option go_package = "bdchain/api/grpc/common"; +option java_package = "bdchain.api.grpc"; +option java_outer_classname = "CommonProto"; +option java_multiple_files = true; + +// InvalidArgument indicates client specified an invalid argument. +// Note that this differs from FailedPrecondition. It indicates arguments +// that are problematic regardless of the state of the system +// (e.g., a malformed file name). +message InvalidArgument { + // A message type used to describe a single invalid field. + message FieldViolation { + // A path leading to a field in the request body. The value will be a + // sequence of dot-separated identifiers that identify a protocol buffer + // field. E.g., "field_violations.field" would identify this field. + string field = 1; + + // A description of why the request element is bad. + string description = 2; + } + + // Describes all violations in a client request. + repeated FieldViolation field_violations = 1; +} diff --git a/gen.bat b/gen.bat index a0803ba..2c755e1 100644 --- a/gen.bat +++ b/gen.bat @@ -10,6 +10,7 @@ where /q %gen% || echo missing %gen% && exit /B if not exist %dir% mkdir %dir% %exe% -I . --go_out=plugins=grpc:%dir% bdchain/api/common.proto +%exe% -I . --go_out=plugins=grpc:%dir% bdchain/api/error_details.proto %exe% -I . --go_out=plugins=grpc:%dir% bdchain/api/tx_ledger.proto %exe% -I . --go_out=plugins=grpc:%dir% bdchain/api/ac_chain.proto diff --git a/gen.sh b/gen.sh index 88bf8ba..3b2356e 100644 --- a/gen.sh +++ b/gen.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash mkdir -p gen/go protoc -I . --go_out=plugins=grpc:gen/go bdchain/api/common.proto +protoc -I . --go_out=plugins=grpc:gen/go bdchain/api/error_details.proto protoc -I . --go_out=plugins=grpc:gen/go bdchain/api/tx_ledger.proto protoc -I . --go_out=plugins=grpc:gen/go bdchain/api/ac_chain.proto diff --git a/test.md b/test.md index cdde0a2..31c4654 100644 --- a/test.md +++ b/test.md @@ -236,14 +236,13 @@ transaction: **Error** ```yaml code: Code.InvalidArgument -message: 'Multiple errors in transaction' +message: 'Multiple invalid arguments' details: - - code: Code.InvalidArgument - message: 'from must not be empty' - details: - - code: Code.InvalidArgument - message: 'to must be a valid 32-byte address' - details: + - field_violations: (of type InvalidArgument) + - field: 'transaction.from' + description: 'from must not be empty' + - field: 'transaction.to' + description: 'to must be a valid 32-byte address' ``` ---