// Copyright 2020 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef GRPC_SRC_CORE_LIB_GPRPP_VALIDATION_ERRORS_H #define GRPC_SRC_CORE_LIB_GPRPP_VALIDATION_ERRORS_H #include <grpc/support/port_platform.h> #include <stddef.h> #include <map> #include <string> #include <utility> #include <vector> #include "absl/status/status.h" #include "absl/strings/string_view.h" namespace grpc_core { // Tracks errors that occur during validation of a data structure (e.g., // a JSON object or protobuf message). Errors are tracked based on // which field they are associated with. If at least one error occurs // during validation, the validation failed. // // Example usage: // // absl::StatusOr<std::string> GetFooBar(const Json::Object& json) { // ValidationErrors errors; // { // ValidationErrors::ScopedField field("foo"); // auto it = json.object_value().find("foo"); // if (it == json.object_value().end()) { // errors.AddError("field not present"); // } else if (it->second.type() != Json::Type::OBJECT) { // errors.AddError("must be a JSON object"); // } else { // const Json& foo = it->second; // ValidationErrors::ScopedField field(".bar"); // auto it = foo.object_value().find("bar"); // if (it == json.object_value().end()) { // errors.AddError("field not present"); // } else if (it->second.type() != Json::Type::STRING) { // errors.AddError("must be a JSON string"); // } else { // return it->second.string_value(); // } // } // } // return errors.status("errors validating foo.bar"); // } class ValidationErrors { … }; } // namespace grpc_core #endif // GRPC_SRC_CORE_LIB_GPRPP_VALIDATION_ERRORS_H