// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_LIB_JSON_PARSER_RAPIDJSON_VALIDATION_H_
#define SRC_LIB_JSON_PARSER_RAPIDJSON_VALIDATION_H_

#include <lib/fitx/result.h>

#include <memory>
#include <sstream>
#include <string_view>

#include <rapidjson/document.h>
#include <rapidjson/schema.h>

namespace json_parser {

// Error for `InitSchema` function.
struct InitSchemaError {
  // Offset in schema json where error occured.
  size_t offset;

  // Call `rapidjson::GetParseError_En` on error code to get string representation.
  rapidjson::ParseErrorCode code;

  std::string ToString() const;
};

// Build a SchemaDocument from a json encoded string.
fitx::result<InitSchemaError, rapidjson::SchemaDocument> InitSchema(std::string_view json);

// Validate that the given json value match the given schema.
// Returns validation error on error.
fitx::result<std::string> ValidateSchema(const rapidjson::Value& value,
                                         const rapidjson::SchemaDocument& schema,
                                         std::string_view value_name = "");

}  // namespace json_parser

#endif  // SRC_LIB_JSON_PARSER_RAPIDJSON_VALIDATION_H_
