| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/torque/ls/json.h" |
| |
| #include <iostream> |
| #include <sstream> |
| #include "src/torque/utils.h" |
| |
| namespace v8 { |
| namespace internal { |
| namespace torque { |
| namespace ls { |
| |
| namespace { |
| |
| void SerializeToString(std::stringstream& str, const JsonValue& value) { |
| switch (value.tag) { |
| case JsonValue::NUMBER: |
| str << value.ToNumber(); |
| break; |
| case JsonValue::STRING: |
| str << StringLiteralQuote(value.ToString()); |
| break; |
| case JsonValue::IS_NULL: |
| str << "null"; |
| break; |
| case JsonValue::BOOL: |
| str << (value.ToBool() ? "true" : "false"); |
| break; |
| case JsonValue::OBJECT: { |
| str << "{"; |
| size_t i = 0; |
| for (const auto& pair : value.ToObject()) { |
| str << "\"" << pair.first << "\":"; |
| SerializeToString(str, pair.second); |
| if (++i < value.ToObject().size()) str << ","; |
| } |
| str << "}"; |
| break; |
| } |
| case JsonValue::ARRAY: { |
| str << "["; |
| size_t i = 0; |
| for (const auto& element : value.ToArray()) { |
| SerializeToString(str, element); |
| if (++i < value.ToArray().size()) str << ","; |
| } |
| str << "]"; |
| break; |
| } |
| default: |
| break; |
| } |
| } |
| |
| } // namespace |
| |
| std::string SerializeToString(const JsonValue& value) { |
| std::stringstream result; |
| SerializeToString(result, value); |
| return result.str(); |
| } |
| |
| } // namespace ls |
| } // namespace torque |
| } // namespace internal |
| } // namespace v8 |