From f452270f8ab0701119f8aa32f1e746a683d58ba4 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Aug 2024 18:27:00 +0200 Subject: [PATCH 1/7] chore: log exception when parsing material json fails --- .../Game/T6/Material/JsonMaterialLoader.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ObjLoading/Game/T6/Material/JsonMaterialLoader.cpp b/src/ObjLoading/Game/T6/Material/JsonMaterialLoader.cpp index c714a955..09517f39 100644 --- a/src/ObjLoading/Game/T6/Material/JsonMaterialLoader.cpp +++ b/src/ObjLoading/Game/T6/Material/JsonMaterialLoader.cpp @@ -39,8 +39,17 @@ namespace return false; } - const auto jMaterial = jRoot.get(); - return CreateMaterialFromJson(jMaterial, material); + try + { + const auto jMaterial = jRoot.get(); + return CreateMaterialFromJson(jMaterial, material); + } + catch (const json::exception& e) + { + std::cerr << std::format("Failed to parse json of material: {}\n", e.what()); + } + + return false; } private: From 939f5b310f854547a07e50ef27af47a56f8a3751 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Aug 2024 18:49:25 +0200 Subject: [PATCH 2/7] chore: log exception when parsing leaderboard json fails --- .../IW4/Leaderboard/JsonLeaderboardDefLoader.cpp | 13 +++++++++++-- .../IW5/Leaderboard/JsonLeaderboardDefLoader.cpp | 13 +++++++++++-- .../T6/Leaderboard/JsonLeaderboardDefLoader.cpp | 13 +++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/ObjLoading/Game/IW4/Leaderboard/JsonLeaderboardDefLoader.cpp b/src/ObjLoading/Game/IW4/Leaderboard/JsonLeaderboardDefLoader.cpp index 4133b5eb..cff973f9 100644 --- a/src/ObjLoading/Game/IW4/Leaderboard/JsonLeaderboardDefLoader.cpp +++ b/src/ObjLoading/Game/IW4/Leaderboard/JsonLeaderboardDefLoader.cpp @@ -36,8 +36,17 @@ namespace return false; } - const auto jLeaderboard = jRoot.get(); - return CreateLeaderboardFromJson(jLeaderboard, leaderboardDef); + try + { + const auto jLeaderboard = jRoot.get(); + return CreateLeaderboardFromJson(jLeaderboard, leaderboardDef); + } + catch (const json::exception& e) + { + std::cerr << std::format("Failed to parse json of leaderboard: {}\n", e.what()); + } + + return false; } private: diff --git a/src/ObjLoading/Game/IW5/Leaderboard/JsonLeaderboardDefLoader.cpp b/src/ObjLoading/Game/IW5/Leaderboard/JsonLeaderboardDefLoader.cpp index afb5650f..092a510d 100644 --- a/src/ObjLoading/Game/IW5/Leaderboard/JsonLeaderboardDefLoader.cpp +++ b/src/ObjLoading/Game/IW5/Leaderboard/JsonLeaderboardDefLoader.cpp @@ -36,8 +36,17 @@ namespace return false; } - const auto jLeaderboard = jRoot.get(); - return CreateLeaderboardFromJson(jLeaderboard, leaderboardDef); + try + { + const auto jLeaderboard = jRoot.get(); + return CreateLeaderboardFromJson(jLeaderboard, leaderboardDef); + } + catch (const json::exception& e) + { + std::cerr << std::format("Failed to parse json of leaderboard: {}\n", e.what()); + } + + return false; } private: diff --git a/src/ObjLoading/Game/T6/Leaderboard/JsonLeaderboardDefLoader.cpp b/src/ObjLoading/Game/T6/Leaderboard/JsonLeaderboardDefLoader.cpp index 9971a218..1fb1d400 100644 --- a/src/ObjLoading/Game/T6/Leaderboard/JsonLeaderboardDefLoader.cpp +++ b/src/ObjLoading/Game/T6/Leaderboard/JsonLeaderboardDefLoader.cpp @@ -37,8 +37,17 @@ namespace return false; } - const auto jLeaderboard = jRoot.get(); - return CreateLeaderboardFromJson(jLeaderboard, leaderboardDef); + try + { + const auto jLeaderboard = jRoot.get(); + return CreateLeaderboardFromJson(jLeaderboard, leaderboardDef); + } + catch (const json::exception& e) + { + std::cerr << std::format("Failed to parse json of leaderboard: {}\n", e.what()); + } + + return false; } private: From 774da9a584cfc7e675f91f49ec612b54c76ab8c9 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Aug 2024 18:50:11 +0200 Subject: [PATCH 3/7] chore: log exception when parsing weapon attachment json fails --- .../Game/IW5/Weapon/JsonWeaponAttachmentLoader.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ObjLoading/Game/IW5/Weapon/JsonWeaponAttachmentLoader.cpp b/src/ObjLoading/Game/IW5/Weapon/JsonWeaponAttachmentLoader.cpp index 5957ba83..71a77664 100644 --- a/src/ObjLoading/Game/IW5/Weapon/JsonWeaponAttachmentLoader.cpp +++ b/src/ObjLoading/Game/IW5/Weapon/JsonWeaponAttachmentLoader.cpp @@ -44,8 +44,17 @@ namespace return false; } - const auto jAttachment = jRoot.get(); - return CreateWeaponAttachmentFromJson(jAttachment, attachment); + try + { + const auto jAttachment = jRoot.get(); + return CreateWeaponAttachmentFromJson(jAttachment, attachment); + } + catch (const json::exception& e) + { + std::cerr << std::format("Failed to parse json of attachment: {}\n", e.what()); + } + + return false; } private: From 0707fa5873c18db1f04dbcc3c37fcacea038780d Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Aug 2024 18:50:35 +0200 Subject: [PATCH 4/7] chore: log exception when parsing weapon camo json fails --- .../Game/T6/WeaponCamo/JsonWeaponCamoLoader.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ObjLoading/Game/T6/WeaponCamo/JsonWeaponCamoLoader.cpp b/src/ObjLoading/Game/T6/WeaponCamo/JsonWeaponCamoLoader.cpp index fada1b6e..3c8a4c60 100644 --- a/src/ObjLoading/Game/T6/WeaponCamo/JsonWeaponCamoLoader.cpp +++ b/src/ObjLoading/Game/T6/WeaponCamo/JsonWeaponCamoLoader.cpp @@ -39,8 +39,17 @@ namespace return false; } - const auto jWeaponCamo = jRoot.get(); - return CreateWeaponCamoFromJson(jWeaponCamo, weaponCamo); + try + { + const auto jWeaponCamo = jRoot.get(); + return CreateWeaponCamoFromJson(jWeaponCamo, weaponCamo); + } + catch (const json::exception& e) + { + std::cerr << std::format("Failed to parse json of weapon camo: {}\n", e.what()); + } + + return false; } private: From 219590898f7a31cd0aef5b02e0c762d970910667 Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Aug 2024 18:50:53 +0200 Subject: [PATCH 5/7] chore: log exception when parsing xmodel json fails --- src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp b/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp index 692a340f..2f142638 100644 --- a/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp +++ b/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp @@ -40,8 +40,17 @@ namespace return false; } - const auto jXModel = jRoot.get(); - return CreateXModelFromJson(jXModel, xmodel); + try + { + const auto jXModel = jRoot.get(); + return CreateXModelFromJson(jXModel, xmodel); + } + catch (const json::exception& e) + { + std::cerr << std::format("Failed to parse json of xmodel: {}\n", e.what()); + } + + return false; } private: From ae6984dff9d9977a1fc5e99e2d113343fb16113e Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Aug 2024 19:21:09 +0200 Subject: [PATCH 6/7] fix: null values not resulting in parsed optional nullopt for json --- src/ObjCommon/Json/JsonExtension.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ObjCommon/Json/JsonExtension.h b/src/ObjCommon/Json/JsonExtension.h index 3b84b35a..897dc4fe 100644 --- a/src/ObjCommon/Json/JsonExtension.h +++ b/src/ObjCommon/Json/JsonExtension.h @@ -18,7 +18,7 @@ namespace nlohmann template void optional_from_json(const nlohmann::json& j, const char* name, std::optional& value) { const auto it = j.find(name); - if (it != j.end()) + if (it != j.end() && !it->is_null()) value = it->get(); else value = std::nullopt; From 4d0096b634f9bb4216cd179c2201a9c9992a5fcc Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 8 Aug 2024 19:22:06 +0200 Subject: [PATCH 7/7] chore: include better diagnostics in json error messages --- thirdparty/json.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/thirdparty/json.lua b/thirdparty/json.lua index 2e6e34f3..ddca7815 100644 --- a/thirdparty/json.lua +++ b/thirdparty/json.lua @@ -2,6 +2,9 @@ json = {} function json:include(includes) if includes:handle(self:name()) then + defines { + "JSON_DIAGNOSTICS=1" + } includedirs { path.join(ThirdPartyFolder(), "json", "single_include") }