47 size_t manifest_size) {
48 parsed_mapping_.clear();
50 rapidjson::Document document;
51 static_assert(
sizeof(
decltype(document)::Ch) ==
sizeof(uint8_t),
"");
52 document.Parse(
reinterpret_cast<const decltype(document)::Ch*
>(manifest),
54 if (document.HasParseError()) {
55 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
58 if (!document.IsObject()) {
59 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
62 auto native_assets = document.FindMember(
"native-assets");
63 if (native_assets == document.MemberEnd() ||
64 !native_assets->value.IsObject()) {
65 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
68 auto mapping = native_assets->value.FindMember(
kTarget);
69 if (mapping == native_assets->value.MemberEnd() ||
70 !mapping->value.IsObject()) {
71 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
74 for (
auto entry = mapping->value.MemberBegin();
75 entry != mapping->value.MemberEnd(); entry++) {
76 std::vector<std::string> parsed_path;
77 entry->name.GetString();
78 auto&
value = entry->value;
79 if (!
value.IsArray()) {
80 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
83 for (
const auto& element :
value.GetArray()) {
84 if (!element.IsString()) {
85 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
88 parsed_path.push_back(element.GetString());
90 parsed_mapping_[entry->name.GetString()] = std::move(parsed_path);