chromium/third_party/grpc/src/src/core/lib/gprpp/validation_errors.h

// 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