| // Copyright 2018 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. |
| |
| #include "peridot/lib/module_manifest_source/json.h" |
| |
| #include "peridot/lib/fidl/json_xdr.h" |
| #include "peridot/lib/module_manifest/module_manifest_xdr.h" |
| #include "peridot/lib/rapidjson/rapidjson.h" |
| #include "rapidjson/document.h" |
| |
| namespace modular { |
| |
| bool ModuleManifestEntryFromJson(const std::string& json, |
| fuchsia::modular::ModuleManifest* entry) { |
| rapidjson::Document doc; |
| // Schema validation of the JSON is happening at publish time. By the time we |
| // get here, we assume it's valid manifest JSON. |
| doc.Parse(json.c_str()); |
| |
| // Handle bad manifests, including older files expressed as an array. |
| // Any mismatch causes XdrRead to DCHECK. |
| if (!doc.IsObject()) { |
| return false; |
| } |
| |
| // Our tooling validates |doc|'s JSON schema so that we don't have to here. |
| // It may be good to do this, though. |
| // TODO(thatguy): Do this if it becomes a problem. |
| if (!XdrRead(&doc, entry, XdrModuleManifest)) { |
| return false; |
| } |
| return true; |
| } |
| |
| void ModuleManifestEntryToJson(const fuchsia::modular::ModuleManifest& entry, |
| std::string* json) { |
| rapidjson::Document doc; |
| fuchsia::modular::ModuleManifest local_entry; |
| fidl::Clone(entry, &local_entry); |
| XdrWrite(&doc, &local_entry, XdrModuleManifest); |
| |
| *json = JsonValueToPrettyString(doc); |
| } |
| |
| } // namespace modular |