Program Listing for File yaml_helpers.h
↰ Return to documentation for file (include/mola_yaml/yaml_helpers.h
)
/* -------------------------------------------------------------------------
* A Modular Optimization framework for Localization and mApping (MOLA)
* Copyright (C) 2018-2024 Jose Luis Blanco, University of Almeria
* See LICENSE for license information.
* ------------------------------------------------------------------------- */
#pragma once
#include <mola_yaml/macro_helpers.h>
#include <mrpt/containers/yaml.h>
#include <sstream>
#include <string>
namespace mola
{
struct YAMLParseOptions
{
bool doIncludes{true};
bool doCmdRuns{true};
bool doEnvVars{true};
std::string includesBasePath;
};
[[nodiscard]] std::string parse_yaml(
const std::string& text, const YAMLParseOptions& opts = YAMLParseOptions());
[[nodiscard]] mrpt::containers::yaml parse_yaml(
const mrpt::containers::yaml& input,
const YAMLParseOptions& opts = YAMLParseOptions());
[[nodiscard]] mrpt::containers::yaml load_yaml_file(
const std::string& fileName,
const YAMLParseOptions& opts = YAMLParseOptions());
[[nodiscard]] std::string yaml_to_string(const mrpt::containers::yaml& cfg);
#define ENSURE_YAML_ENTRY_EXISTS(_c, _name) \
ASSERTMSG_( \
_c.has(_name), \
mrpt::format( \
"Missing YAML required entry: `%s`", std::string(_name).c_str()))
#define YAML_LOAD_OPT3(_param_str, _varname, _type) \
_param_str._varname = \
cfg.getOrDefault<_type>(#_varname, _param_str._varname)
#define YAML_LOAD_OPT2(_varname, _type) \
_varname = cfg.getOrDefault<_type>(#_varname, _varname)
#define YAML_LOAD_OPT_DEG2(_varname, _type) \
_varname = mrpt::DEG2RAD( \
cfg.getOrDefault<_type>(#_varname, mrpt::RAD2DEG(_varname)))
#define YAML_LOAD_MEMBER_OPT(_varname, _type) \
_varname##_ = cfg.getOrDefault<_type>(#_varname, _varname##_)
#define YAML_LOAD_REQ3(_param_str, _varname, _type) \
ENSURE_YAML_ENTRY_EXISTS(cfg, #_varname); \
YAML_LOAD_OPT3(_param_str, _varname, _type)
#define YAML_LOAD_REQ2(_varname, _type) \
ENSURE_YAML_ENTRY_EXISTS(cfg, #_varname); \
YAML_LOAD_OPT2(_varname, _type)
#define YAML_LOAD_REQ_DEG2(_varname, _type) \
ENSURE_YAML_ENTRY_EXISTS(cfg, #_varname); \
YAML_LOAD_OPT_DEG2(_varname, _type)
#define YAML_LOAD_MEMBER_REQ(_varname, _type) \
ENSURE_YAML_ENTRY_EXISTS(cfg, #_varname); \
YAML_LOAD_MEMBER_OPT(_varname, _type)
#define YAML_LOAD_OPT_DEG3(_param_str, _varname, _type) \
_param_str._varname = mrpt::RAD2DEG(_param_str._varname); \
YAML_LOAD_OPT3(_param_str, _varname, _type); \
_param_str._varname = mrpt::DEG2RAD(_param_str._varname)
#define YAML_LOAD_REQ_DEG3(_param_str, _varname, _type) \
_param_str._varname = mrpt::RAD2DEG(_param_str._varname); \
YAML_LOAD_REQ(_param_str, _varname, _type); \
_param_str._varname = mrpt::DEG2RAD(_param_str._varname)
#define YAML_LOAD_OPT(...) VFUNC(YAML_LOAD_OPT, __VA_ARGS__)
#define YAML_LOAD_REQ(...) VFUNC(YAML_LOAD_REQ, __VA_ARGS__)
#define YAML_LOAD_OPT_DEG(...) VFUNC(YAML_LOAD_OPT_DEG, __VA_ARGS__)
#define YAML_LOAD_REQ_DEG(...) VFUNC(YAML_LOAD_REQ_DEG, __VA_ARGS__)
} // namespace mola