+28
-26
@@ -15,13 +15,13 @@
|
||||
#include <luma/detail/errors.hpp>
|
||||
#include <luma/theme.hpp>
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr auto json_options = modulus::json_config::options{
|
||||
.category = "luma",
|
||||
.invalid_argument_code = luma::detail::error_invalid_argument,
|
||||
.not_found_code = luma::detail::error_not_found
|
||||
};
|
||||
.not_found_code = luma::detail::error_not_found};
|
||||
|
||||
auto invalid_display(std::string message) -> std::expected<luma::display_config, modulus::error> {
|
||||
assert(!message.empty());
|
||||
@@ -40,7 +40,7 @@ auto invalid_application(std::string message) -> std::expected<luma::application
|
||||
|
||||
}
|
||||
|
||||
auto luma::validate(luma::display_config const& config) -> std::expected<void, modulus::error> {
|
||||
auto luma::validate(luma::display_config const &config) -> std::expected<void, modulus::error> {
|
||||
if (config.width <= 0) {
|
||||
return luma::detail::fail<void>(luma::detail::error_invalid_argument, "display.width must be positive");
|
||||
}
|
||||
@@ -59,14 +59,14 @@ auto luma::validate(luma::display_config const& config) -> std::expected<void, m
|
||||
return {};
|
||||
}
|
||||
|
||||
auto luma::validate(luma::touch_config const& config) -> std::expected<void, modulus::error> {
|
||||
auto luma::validate(luma::touch_config const &config) -> std::expected<void, modulus::error> {
|
||||
if (config.max_points <= 0) {
|
||||
return luma::detail::fail<void>(luma::detail::error_invalid_argument, "touch.max_points must be positive");
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
auto luma::validate(luma::application_config const& config) -> std::expected<void, modulus::error> {
|
||||
auto luma::validate(luma::application_config const &config) -> std::expected<void, modulus::error> {
|
||||
if (config.title.empty()) {
|
||||
return luma::detail::fail<void>(luma::detail::error_invalid_argument, "title must not be empty");
|
||||
}
|
||||
@@ -82,18 +82,19 @@ auto luma::validate(luma::application_config const& config) -> std::expected<voi
|
||||
return {};
|
||||
}
|
||||
|
||||
auto luma::parse_display_config(boost::json::value const& value) -> std::expected<luma::display_config, modulus::error> {
|
||||
auto luma::parse_display_config(boost::json::value const &value) -> std::expected<luma::display_config, modulus::error> {
|
||||
auto object = modulus::json_config::require_object(value, "display", json_options);
|
||||
if (!object) {
|
||||
return invalid_display(std::string{object.error().message()});
|
||||
}
|
||||
auto unknown = modulus::json_config::reject_unknown_fields(**object, {
|
||||
"width",
|
||||
"height",
|
||||
"target_fps",
|
||||
"idle_fps",
|
||||
"fullscreen",
|
||||
}, "display", json_options);
|
||||
"width",
|
||||
"height",
|
||||
"target_fps",
|
||||
"idle_fps",
|
||||
"fullscreen",
|
||||
},
|
||||
"display", json_options);
|
||||
if (!unknown) {
|
||||
return invalid_display(std::string{unknown.error().message()});
|
||||
}
|
||||
@@ -129,7 +130,7 @@ auto luma::parse_display_config(boost::json::value const& value) -> std::expecte
|
||||
return modulus::success(config);
|
||||
}
|
||||
|
||||
auto luma::parse_touch_config(boost::json::value const& value) -> std::expected<luma::touch_config, modulus::error> {
|
||||
auto luma::parse_touch_config(boost::json::value const &value) -> std::expected<luma::touch_config, modulus::error> {
|
||||
auto object = modulus::json_config::require_object(value, "touch", json_options);
|
||||
if (!object) {
|
||||
return invalid_touch(std::string{object.error().message()});
|
||||
@@ -150,17 +151,18 @@ auto luma::parse_touch_config(boost::json::value const& value) -> std::expected<
|
||||
return modulus::success(config);
|
||||
}
|
||||
|
||||
auto luma::parse_application_config(boost::json::value const& value) -> std::expected<luma::application_config, modulus::error> {
|
||||
auto luma::parse_application_config(boost::json::value const &value) -> std::expected<luma::application_config, modulus::error> {
|
||||
auto object = modulus::json_config::require_object(value, "application config", json_options);
|
||||
if (!object) {
|
||||
return invalid_application(std::string{object.error().message()});
|
||||
}
|
||||
auto unknown = modulus::json_config::reject_unknown_fields(**object, {
|
||||
"title",
|
||||
"display",
|
||||
"touch",
|
||||
"theme",
|
||||
}, "application config", json_options);
|
||||
"title",
|
||||
"display",
|
||||
"touch",
|
||||
"theme",
|
||||
},
|
||||
"application config", json_options);
|
||||
if (!unknown) {
|
||||
return invalid_application(std::string{unknown.error().message()});
|
||||
}
|
||||
@@ -170,21 +172,21 @@ auto luma::parse_application_config(boost::json::value const& value) -> std::exp
|
||||
return invalid_application(std::string{title.error().message()});
|
||||
}
|
||||
config.title = *title;
|
||||
if (auto const* display = (*object)->if_contains("display")) {
|
||||
if (auto const *display = (*object)->if_contains("display")) {
|
||||
auto parsed = luma::parse_display_config(*display);
|
||||
if (!parsed) {
|
||||
return invalid_application(std::string{parsed.error().message()});
|
||||
}
|
||||
config.display = *parsed;
|
||||
}
|
||||
if (auto const* touch = (*object)->if_contains("touch")) {
|
||||
if (auto const *touch = (*object)->if_contains("touch")) {
|
||||
auto parsed = luma::parse_touch_config(*touch);
|
||||
if (!parsed) {
|
||||
return invalid_application(std::string{parsed.error().message()});
|
||||
}
|
||||
config.touch = *parsed;
|
||||
}
|
||||
if (auto const* theme = (*object)->if_contains("theme")) {
|
||||
if (auto const *theme = (*object)->if_contains("theme")) {
|
||||
auto parsed = luma::parse_theme(*theme);
|
||||
if (!parsed) {
|
||||
return invalid_application(std::string{parsed.error().message()});
|
||||
@@ -197,7 +199,7 @@ auto luma::parse_application_config(boost::json::value const& value) -> std::exp
|
||||
return modulus::success(config);
|
||||
}
|
||||
|
||||
auto luma::load_application_config(std::string const& path) -> std::expected<luma::application_config, modulus::error> {
|
||||
auto luma::load_application_config(std::string const &path) -> std::expected<luma::application_config, modulus::error> {
|
||||
auto value = modulus::json_config::load_value(path, json_options);
|
||||
if (!value) {
|
||||
return modulus::fail<luma::application_config>(value.error());
|
||||
@@ -205,7 +207,7 @@ auto luma::load_application_config(std::string const& path) -> std::expected<lum
|
||||
return luma::parse_application_config(*value);
|
||||
}
|
||||
|
||||
auto luma::to_json(luma::display_config const& config) -> boost::json::value {
|
||||
auto luma::to_json(luma::display_config const &config) -> boost::json::value {
|
||||
return boost::json::object{
|
||||
{
|
||||
"width",
|
||||
@@ -230,7 +232,7 @@ auto luma::to_json(luma::display_config const& config) -> boost::json::value {
|
||||
};
|
||||
}
|
||||
|
||||
auto luma::to_json(luma::touch_config const& config) -> boost::json::value {
|
||||
auto luma::to_json(luma::touch_config const &config) -> boost::json::value {
|
||||
return boost::json::object{
|
||||
{
|
||||
"max_points",
|
||||
@@ -239,7 +241,7 @@ auto luma::to_json(luma::touch_config const& config) -> boost::json::value {
|
||||
};
|
||||
}
|
||||
|
||||
auto luma::to_json(luma::application_config const& config) -> boost::json::value {
|
||||
auto luma::to_json(luma::application_config const &config) -> boost::json::value {
|
||||
return boost::json::object{
|
||||
{
|
||||
"title",
|
||||
|
||||
Reference in New Issue
Block a user