Skip to content

Commit 7872c16

Browse files
committed
fable: Provide helper for json to sol::object conversion
1 parent 7e3d3a2 commit 7872c16

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

fable/include/fable/utility/sol.hpp

+17
Original file line numberDiff line numberDiff line change
@@ -226,3 +226,20 @@ struct adl_serializer<sol::object> {
226226
};
227227

228228
} // namespace nlohmann
229+
230+
namespace fable {
231+
232+
inline sol::object into_sol_object(sol::state_view& lua, const nlohmann::json& json) {
233+
auto tmp = sol::object(lua, sol::in_place, nullptr);
234+
nlohmann::adl_serializer<sol::object>::from_json(json, tmp);
235+
return tmp;
236+
}
237+
238+
inline sol::object into_sol_object(sol::this_state& state, const nlohmann::json& json) {
239+
auto lua = sol::state_view(state);
240+
auto tmp = sol::object(lua, sol::in_place, nullptr);
241+
nlohmann::adl_serializer<sol::object>::from_json(json, tmp);
242+
return tmp;
243+
}
244+
245+
} // namespace fable

fable/src/fable/utility/sol_test.cpp

+5-11
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,11 @@ TEST(fable_utility_sol, to_json) {
4747
assert_xeq("x = {}", "[]");
4848
}
4949

50-
void json_to_lua(sol::state_view& lua, std::string_view field, const fable::Json& json) {
51-
auto tmp = sol::object(lua, sol::in_place, nullptr);
52-
nlohmann::adl_serializer<sol::object>::from_json(json, tmp);
53-
lua[field] = tmp;
54-
}
55-
5650
TEST(fable_utility_sol, from_json_bool) {
5751
auto lua = sol::state();
5852
lua.open_libraries(sol::lib::base);
5953

60-
json_to_lua(lua, "json", Json(true));
54+
lua["json"] = fable::into_sol_object(lua, Json(true));
6155
lua.script(
6256
R"(
6357
assert(type(json) == "boolean")
@@ -69,7 +63,7 @@ TEST(fable_utility_sol, from_json_int) {
6963
auto lua = sol::state();
7064
lua.open_libraries(sol::lib::base);
7165

72-
json_to_lua(lua, "json", Json(42));
66+
lua["json"] = fable::into_sol_object(lua, Json(42));
7367
lua.script(
7468
R"(
7569
assert(type(json) == "number")
@@ -81,7 +75,7 @@ TEST(fable_utility_sol, from_json_float) {
8175
auto lua = sol::state();
8276
lua.open_libraries(sol::lib::base);
8377

84-
json_to_lua(lua, "json", Json(3.14159));
78+
lua["json"] = fable::into_sol_object(lua, Json(3.14159));
8579
lua.script(
8680
R"(
8781
assert(type(json) == "number")
@@ -93,7 +87,7 @@ TEST(fable_utility_sol, from_json_string) {
9387
auto lua = sol::state();
9488
lua.open_libraries(sol::lib::base);
9589

96-
json_to_lua(lua, "json", Json("hello world!"));
90+
lua["json"] = fable::into_sol_object(lua, Json("hello world!"));
9791
lua.script(
9892
R"(
9993
assert(type(json) == "string")
@@ -105,7 +99,7 @@ TEST(fable_utility_sol, from_json_array) {
10599
auto lua = sol::state();
106100
lua.open_libraries(sol::lib::base);
107101

108-
json_to_lua(lua, "json", Json({1, 2, 3}));
102+
lua["json"] = fable::into_sol_object(lua, Json({1, 2, 3}));
109103
lua.script(
110104
R"(
111105
assert(type(json) == "table")

0 commit comments

Comments
 (0)