Skip to content

Commit 1446d79

Browse files
committed
feat: improve REX::JSON
1 parent a48b4ec commit 1446d79

1 file changed

Lines changed: 27 additions & 13 deletions

File tree

src/REX/REX/JSON.cpp

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@ namespace REX::JSON
1717
T& a_valueDefault)
1818
{
1919
const auto& json = *static_cast<glz::json_t*>(a_data);
20-
a_value = glz::get<T>(json, a_path).value_or(a_valueDefault);
20+
if (a_path[0] == '/') {
21+
a_value = glz::get<T>(json, a_path).value_or(a_valueDefault);
22+
} else {
23+
auto path = std::format("/{}"sv, a_path);
24+
a_value = glz::get<T>(json, path).value_or(a_valueDefault);
25+
}
2126
}
2227

2328
template void SettingLoad<bool>(void*, path_t, bool&, bool&);
@@ -37,8 +42,13 @@ namespace REX::JSON
3742
path_t a_path,
3843
T& a_value)
3944
{
40-
const auto& json = *static_cast<glz::json_t*>(a_data);
41-
glz::set(json, a_path, a_value);
45+
auto& json = *static_cast<glz::json_t*>(a_data);
46+
if (a_path[0] == '/') {
47+
glz::set(json, a_path, a_value);
48+
} else {
49+
auto path = std::format("/{}"sv, a_path);
50+
glz::set(json, path, a_value);
51+
}
4252
}
4353

4454
template void SettingSave<bool>(void*, path_t, bool&);
@@ -58,9 +68,9 @@ namespace REX::JSON
5868
if (std::filesystem::exists(m_fileBase)) {
5969
glz::json_t result;
6070
std::string buffer;
61-
const auto error = glz::read_file_json(result, m_fileBase, buffer);
62-
if (error) {
63-
REX::ERROR("{}"sv, glz::format_error(error, buffer));
71+
const auto errorc = glz::read_file_json(result, m_fileBase, buffer);
72+
if (errorc) {
73+
REX::ERROR("{}"sv, glz::format_error(errorc, buffer));
6474
} else {
6575
for (auto setting : m_settings) {
6676
setting->Load(&result, true);
@@ -71,9 +81,9 @@ namespace REX::JSON
7181
if (std::filesystem::exists(m_fileUser)) {
7282
glz::json_t result;
7383
std::string buffer;
74-
const auto error = glz::read_file_json(result, m_fileUser, buffer);
75-
if (error) {
76-
REX::ERROR("{}"sv, glz::format_error(error, buffer));
84+
const auto errorc = glz::read_file_json(result, m_fileUser, buffer);
85+
if (errorc) {
86+
REX::ERROR("{}"sv, glz::format_error(errorc, buffer));
7787
} else {
7888
for (auto setting : m_settings) {
7989
setting->Load(&result, true);
@@ -87,17 +97,21 @@ namespace REX::JSON
8797
glz::json_t output;
8898
if (std::filesystem::exists(m_fileBase)) {
8999
std::string buffer;
90-
const auto error = glz::read_file_json(output, m_fileBase, buffer);
91-
if (error) {
92-
REX::ERROR("{}"sv, glz::format_error(error, buffer));
100+
const auto errorc = glz::read_file_json(output, m_fileBase, buffer);
101+
if (errorc) {
102+
REX::ERROR("{}"sv, glz::format_error(errorc, buffer));
93103
}
94104
}
95105

96106
for (auto& setting : m_settings) {
97107
setting->Save(&output);
98108
}
99109

100-
glz::write_file_json(output, m_fileBase, std::string{});
110+
std::string buffer;
111+
const auto errorc = glz::write_file_json(output, m_fileBase, buffer);
112+
if (errorc) {
113+
REX::ERROR("{}"sv, glz::format_error(errorc, buffer));
114+
}
101115
}
102116
}
103117
#endif

0 commit comments

Comments
 (0)