#ifndef SOPHIAR2_CONFIG_UTILITY_HPP #define SOPHIAR2_CONFIG_UTILITY_HPP #define ENSURE_ARRAY(item_name) \ assert(config.contains(item_name)); \ assert(config[item_name].is_array()); #define LOAD_UINT_ITEM(item_name) ({ \ assert(config.contains(item_name)); \ assert(config[item_name].is_number_unsigned()); \ config[item_name].get(); }) #define LOAD_STRING_ITEM(item_name) ({ \ assert(config.contains(item_name)); \ assert(config[item_name].is_string()); \ config[item_name].get(); }) #define LOAD_STRING_ITEM2(config, item_name) ({ \ assert(config.contains(item_name)); \ assert(config[item_name].is_string()); \ config[item_name].get(); }) #define LOAD_VARIABLE_INDEX(var_type, var_name) ({ \ auto _name = LOAD_STRING_ITEM(var_name); \ REQUIRE_VARIABLE(var_type, _name); }) #define LOAD_VARIABLE_INDEX2(config, var_type, var_name) ({ \ auto _name = LOAD_STRING_ITEM2(config, var_name); \ REQUIRE_VARIABLE(var_type, _name); }) #define LOAD_VARIABLE_INDEX_WITH_NAME(var_type, var_name, var_name_out) ({ \ var_name_out = LOAD_STRING_ITEM(var_name); \ REQUIRE_VARIABLE(var_type, var_name_out); }) #define SAFE_CLOSE_CORO_WORKER(worker) \ worker->cancel(); \ co_await worker->coro_wait_stop(); \ worker = nullptr; #endif //SOPHIAR2_CONFIG_UTILITY_HPP