| // Copyright 2016 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_PRETTY_PRINT_H_ |
| #define SRC_LIB_JSON_PARSER_PRETTY_PRINT_H_ |
| |
| #include <sstream> |
| #include <string> |
| #include <vector> |
| |
| #include <rapidjson/document.h> |
| #include <rapidjson/pointer.h> |
| #include <rapidjson/prettywriter.h> |
| #include <rapidjson/stringbuffer.h> |
| #include <rapidjson/writer.h> |
| |
| // This contains pretty printing routines for parsed JSON values. |
| |
| namespace json_parser { |
| |
| using JsonDoc = ::rapidjson::Document; |
| using JsonValue = JsonDoc::ValueType; |
| using JsonPointer = ::rapidjson::GenericPointer<JsonValue>; |
| |
| // Helper function to convert the given JsonValue to a string. Note that a |
| // JsonDoc is also a JsonValue. |
| template <typename T> |
| inline std::string JsonValueToString(const T& v) { |
| rapidjson::StringBuffer buffer; |
| rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); |
| v.Accept(writer); |
| return buffer.GetString(); |
| } |
| |
| // Like above, but pretty prints the string. |
| template <typename T> |
| inline std::string JsonValueToPrettyString(const T& v) { |
| rapidjson::StringBuffer buffer; |
| rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer); |
| v.Accept(writer); |
| return buffer.GetString(); |
| } |
| |
| // Take a vector of std::string and convert it to "/a/b/c" form for display. |
| // For debugging/logging purposes only |
| inline std::string PrettyPrintPath(const std::vector<std::string>& path) { |
| std::string result; |
| for (const auto& str : path) { |
| result += '/' + str; |
| } |
| return result; |
| } |
| |
| } // namespace json_parser |
| |
| #endif // SRC_LIB_JSON_PARSER_PRETTY_PRINT_H_ |