4#include "spdlog/spdlog.h"
7#include <toml++/toml.hpp>
12 semver::version<int, int, int> version;
13 std::map<std::string, std::pair<semver::range_set<int, int, int>, std::string>> dependencies;
16 static ModMetadata LoadFromTOML(
const std::string& tomlContent) {
19 auto table = toml::parse(tomlContent);
20 auto mods_property = table[
"mod"];
22 if (
auto nameValue = mods_property[
"name"].value<std::string>()) {
23 metadata.name = *nameValue;
26 if (
auto versionValue = mods_property[
"version"].value<std::string>()) {
27 semver::parse(*versionValue, metadata.version);
30 if (
auto *depsTable = table[
"dependencies"].as_table()) {
31 for (
const auto& [key, value] : *depsTable) {
32 if (
auto depVersion = value.value<std::string>()) {
33 semver::range_set<int, int, int> parsedVersion;
34 semver::parse(*depVersion, parsedVersion);
35 metadata.dependencies[std::string(key)] = std::make_pair(parsedVersion, *depVersion);
39 }
catch (
const toml::parse_error& err) {
40 SPDLOG_ERROR(
"Failed to parse mods.toml: {}", err.what());
46 std::string ToString()
const;