AutoYAML is a Clang/LLVM/LibTooling-based program that automatically
generates yaml-cpp conversion code for
C++ record types.
As a motivational example, say you are writing a C++ program and want to start
parsing configuration files such as the following (MyConfiguration.yaml):
a_number: 42
a_list_of_numbers:
- 1
- 2
- 3
a_boolean_flag: true
a_dictionary:
- a: alpaca
- b: beaver
- c: capybara
# ...With AutoYAML you can directly transform this YAML file into an equivalent C++
object. To this end, first define an appropriate C++ record type in some header
file (MyConfiguration.h) and mark it as an AutoYAML target with the
AutoYAML() macro:
#include "AutoYAML.h"
AutoYAML(struct) MyConfiguration
{
int a_number;
std::vector<int> a_list_of_numbers;
bool a_boolean_flag;
std::map<std::string, std::string> a_dictionary;
// ...
};Then run the AutoYAML tool over this header file as such:
AutoYAML MyConfiguration.h --out-dir $MY_OUTPUT_DIRECTORY --
This will generate another header file MyConfiguration.AutoYAML.h in
$MY_OUTPUT_DIRECTORY. You can then include both these header files into your
program and start parsing configuration files like nobody's business:
#include <iostream>
#include "yaml-cpp/yaml.h"
#include "MyConfiguration.h"
#include "MyConfiguration.AutoYAML.h"
int main()
{
auto node { YAML::LoadFile("MyConfiguration.yaml") };
auto config { node.as<MyConfiguration>() };
std::cout << config.a_number << '\n'; // 42
std::cout << config.a_list_of_numbers[0] << '\n'; // 1
std::cout << config.a_boolean_flag << '\n'; // 1
std::cout << config.a_dictionary["a"] << '\n'; // "alpaca"
// ...
}You will need to install Clang/LLVM development files in order to build
AutoYAML, how to do this is up to you. See
here for more information on
LibTooling.
To build AutoYAML, execute the following commands from the root of the
repository:
mkdir build && cd build
cmake .. -DCMAKE_CXX_COMPILER=clang++
cmake --build .
This will create the AutoYAML executable at the root of the build directory.
You can install it to ${CMAKE_INSTALL_PREFIX}/bin by running `cmake --install.
- More tests
- CI
- Proper CMake integration