diff include/core/json.h @ 174:f88eda79c60a

anime/db: add some more json functionality, still doesn't compile :/
author Paper <mrpapersonic@gmail.com>
date Wed, 29 Nov 2023 13:53:56 -0500
parents b315f3759c56
children 9b10175be389
line wrap: on
line diff
--- a/include/core/json.h	Tue Nov 28 13:53:54 2023 -0500
+++ b/include/core/json.h	Wed Nov 29 13:53:56 2023 -0500
@@ -5,10 +5,32 @@
 
 namespace JSON {
 
-std::string GetString(nlohmann::json const& json, nlohmann::json::json_pointer const& ptr, std::string def = "");
-int GetInt(nlohmann::json const& json, nlohmann::json::json_pointer const& ptr, int def = 0);
-bool GetBoolean(nlohmann::json const& json, nlohmann::json::json_pointer const& ptr, bool def = false);
-double GetDouble(nlohmann::json const& json, nlohmann::json::json_pointer const& ptr, double def = 0);
+template<typename T = std::string>
+T GetString(const nlohmann::json& json, const nlohmann::json::json_pointer& ptr, T def) {
+	if (json.contains(ptr) && json[ptr].is_string())
+		return json[ptr].get<T>();
+	else
+		return def;
+}
+
+template<typename T = int>
+T GetNumber(const nlohmann::json& json, const nlohmann::json::json_pointer& ptr, T def = 0) {
+	if (json.contains(ptr) && json[ptr].is_number())
+		return json[ptr].get<T>();
+	else
+		return def;
+}
+
+template<typename T = std::vector<std::string>>
+T GetArray(const nlohmann::json& json, const nlohmann::json::json_pointer& ptr, T def = 0) {
+	if (json.contains(ptr) && json[ptr].is_array())
+		return json[ptr].get<T>();
+	else
+		return def;
+}
+
+nlohmann::json GetValue(const nlohmann::json& json, const nlohmann::json::json_pointer& ptr);
+bool GetBoolean(const nlohmann::json& json, const nlohmann::json::json_pointer& ptr, bool def = false);
 
 } // namespace JSON