47 size_t manifest_size) {
50 parsed_mapping_.clear();
52 rapidjson::Document document;
53 static_assert(
sizeof(
decltype(document)::Ch) ==
sizeof(uint8_t),
"");
54 document.Parse(
reinterpret_cast<const decltype(document)::Ch*
>(manifest),
56 if (document.HasParseError()) {
57 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
60 if (!document.IsObject()) {
61 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
64 auto native_assets = document.FindMember(
"native-assets");
65 if (native_assets == document.MemberEnd() ||
66 !native_assets->value.IsObject()) {
67 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
70 auto mapping = native_assets->value.FindMember(
kTarget);
71 if (mapping == native_assets->value.MemberEnd() ||
72 !mapping->value.IsObject()) {
73 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
76 for (
auto entry = mapping->value.MemberBegin();
77 entry != mapping->value.MemberEnd(); entry++) {
78 std::vector<std::string> parsed_path;
79 entry->name.GetString();
80 auto&
value = entry->value;
81 if (!
value.IsArray()) {
82 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
85 for (
const auto& element :
value.GetArray()) {
86 if (!element.IsString()) {
87 FML_DLOG(WARNING) <<
"NativeAssetsManifest.json is malformed.";
90 parsed_path.push_back(element.GetString());
92 parsed_mapping_[entry->name.GetString()] = std::move(parsed_path);