| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/json/json_string_value_serializer.h" |
| |
| #include <string_view> |
| |
| #include "base/json/json_reader.h" |
| #include "base/json/json_writer.h" |
| |
| using base::Value; |
| |
| JSONStringValueSerializer::JSONStringValueSerializer(std::string* json_string) |
| : json_string_(json_string), |
| pretty_print_(false) { |
| } |
| |
| JSONStringValueSerializer::~JSONStringValueSerializer() = default; |
| |
| bool JSONStringValueSerializer::Serialize(base::ValueView root) { |
| return SerializeInternal(root, false); |
| } |
| |
| bool JSONStringValueSerializer::SerializeAndOmitBinaryValues( |
| base::ValueView root) { |
| return SerializeInternal(root, true); |
| } |
| |
| bool JSONStringValueSerializer::SerializeInternal(base::ValueView root, |
| bool omit_binary_values) { |
| if (!json_string_) |
| return false; |
| |
| int options = 0; |
| if (omit_binary_values) |
| options |= base::JSONWriter::OPTIONS_OMIT_BINARY_VALUES; |
| if (pretty_print_) |
| options |= base::JSONWriter::OPTIONS_PRETTY_PRINT; |
| |
| return base::JSONWriter::WriteWithOptions(root, options, json_string_); |
| } |
| |
| JSONStringValueDeserializer::JSONStringValueDeserializer( |
| std::string_view json_string, |
| int options) |
| : json_string_(json_string), options_(options) {} |
| |
| JSONStringValueDeserializer::~JSONStringValueDeserializer() = default; |
| |
| std::unique_ptr<Value> JSONStringValueDeserializer::Deserialize( |
| int* error_code, |
| std::string* error_str) { |
| auto ret = |
| base::JSONReader::ReadAndReturnValueWithError(json_string_, options_); |
| if (ret.has_value()) |
| return base::Value::ToUniquePtrValue(std::move(*ret)); |
| |
| if (error_code) |
| *error_code = base::ValueDeserializer::kErrorCodeInvalidFormat; |
| if (error_str) |
| *error_str = std::move(ret.error().message); |
| return nullptr; |
| } |