Mario Kart 64
Loading...
Searching...
No Matches
ModMetadata.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef __cplusplus
4#include "spdlog/spdlog.h"
5#include <string>
6#include <map>
7#include <toml++/toml.hpp>
8#include "semver.hpp"
9
10struct ModMetadata {
11 std::string name;
12 semver::version<int, int, int> version;
13 std::map<std::string, std::pair<semver::range_set<int, int, int>, std::string>> dependencies;
14
15 ModMetadata() {}
16 static ModMetadata LoadFromTOML(const std::string& tomlContent) {
17 ModMetadata metadata;
18 try {
19 auto table = toml::parse(tomlContent);
20 auto mods_property = table["mod"];
21
22 if (auto nameValue = mods_property["name"].value<std::string>()) {
23 metadata.name = *nameValue;
24 }
25
26 if (auto versionValue = mods_property["version"].value<std::string>()) {
27 semver::parse(*versionValue, metadata.version);
28 }
29
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);
36 }
37 }
38 }
39 } catch (const toml::parse_error& err) {
40 SPDLOG_ERROR("Failed to parse mods.toml: {}", err.what());
41 }
42
43 return metadata;
44 }
45
46 std::string ToString() const;
47};
48#endif