static void DeserializeMetadata(const std::string& document, CAddonBuilder& builder) { CVariant variant = CJSONVariantParser::Parse(document); builder.SetAuthor(variant["author"].asString()); builder.SetDisclaimer(variant["disclaimer"].asString()); builder.SetBroken(variant["broken"].asString()); builder.SetPackageSize(variant["size"].asUnsignedInteger()); builder.SetPath(variant["path"].asString()); builder.SetFanart(variant["fanart"].asString()); builder.SetIcon(variant["icon"].asString()); std::vector<std::string> screenshots; for (auto it = variant["screenshots"].begin_array(); it != variant["screenshots"].end_array(); ++it) screenshots.push_back(it->asString()); builder.SetScreenshots(std::move(screenshots)); builder.SetType(TranslateType(variant["extensions"][0].asString())); ADDONDEPS deps; for (auto it = variant["dependencies"].begin_array(); it != variant["dependencies"].end_array(); ++it) { AddonVersion version((*it)["version"].asString()); deps.emplace((*it)["addonId"].asString(), std::make_pair(std::move(version), (*it)["optional"].asBoolean())); } builder.SetDependencies(std::move(deps)); InfoMap extraInfo; for (auto it = variant["extrainfo"].begin_array(); it != variant["extrainfo"].end_array(); ++it) extraInfo.emplace((*it)["key"].asString(), (*it)["value"].asString()); builder.SetExtrainfo(std::move(extraInfo)); }
static void DeserializeMetadata(const std::string& document, CAddonBuilder& builder) { CVariant variant; if (!CJSONVariantParser::Parse(document, variant)) return; builder.SetAuthor(variant["author"].asString()); builder.SetDisclaimer(variant["disclaimer"].asString()); builder.SetBroken(variant["broken"].asString()); builder.SetPackageSize(variant["size"].asUnsignedInteger()); builder.SetPath(variant["path"].asString()); builder.SetIcon(variant["icon"].asString()); std::map<std::string, std::string> art; for (auto it = variant["art"].begin_map(); it != variant["art"].end_map(); ++it) art.emplace(it->first, it->second.asString()); builder.SetArt(std::move(art)); std::vector<std::string> screenshots; for (auto it = variant["screenshots"].begin_array(); it != variant["screenshots"].end_array(); ++it) screenshots.push_back(it->asString()); builder.SetScreenshots(std::move(screenshots)); builder.SetType(CAddonInfo::TranslateType(variant["extensions"][0].asString())); { std::vector<DependencyInfo> deps; for (auto it = variant["dependencies"].begin_array(); it != variant["dependencies"].end_array(); ++it) { deps.emplace_back( (*it)["addonId"].asString(), AddonVersion((*it)["version"].asString()), (*it)["optional"].asBoolean()); } builder.SetDependencies(std::move(deps)); } InfoMap extraInfo; for (auto it = variant["extrainfo"].begin_array(); it != variant["extrainfo"].end_array(); ++it) extraInfo.emplace((*it)["key"].asString(), (*it)["value"].asString()); builder.SetExtrainfo(std::move(extraInfo)); }