| Ariles
    | 
| branch | HEAD v2 | pkg_ws_2 (ROS/ROS2 packages) | 
|---|---|---|
| CI status | ||
| package | 
Loosely speaking, ariles is a C++ reflection library, i.e., it provides meta-programming APIs for implementation of class visitors (processors). It also provides a number of (de)serializers based on these APIs, e.g., YAML, JSON, XML, ROS parameter server, ROS2 parameters; and serialization wrappers for some types, e.g., STL containers, smart pointers, Eigen matrices, etc.
boost::serialization, ariles tries to be flexible while parsing by:XML,YAML <-> ROS parameter server. Note that the conversion is not data-agnostic, i.e., the complete data structure must be represented in C++ code.Octave script for debugging purposes.URDF.URDF parser.Class [./tests/api_v2/types/minimal.h]: 
Serialization:
Result:
Deserialization:
Conversion:
Note that ROS/ROS2 compatible packages are available in a separate branch https://github.com/asherikov/ariles/tree/pkg_ws_2.
See demo for more examples: https://asherikov.github.io/ariles/2/DEMO.html [./tests/api_v2/demo_api_v2.cpp]
ariles includes a number of optional visitors that support various data representation formats, in particular:
YAML via yaml-cpp: https://asherikov.github.io/ariles/2/group__yaml__cpp.html.msgpack via msgpack-c: https://asherikov.github.io/ariles/2/group__msgpack.html.JSON via RapidJSON, with optional Jsonnet preprocessing: https://asherikov.github.io/ariles/2/group__rapidjson.html and https://asherikov.github.io/ariles/2/group__jsonnet.html.XML via PugiXML: https://asherikov.github.io/ariles/2/group__pugixml.htmlOctave script, output only, no dependencies: https://asherikov.github.io/ariles/2/group__octave.htmlROS parameter server, via ROS libs: https://asherikov.github.io/ariles/2/group__rosparam.htmlgraphviz dot files for diagram generation: https://asherikov.github.io/ariles/2/group__graphviz.htmlROS2 parameters, via rclcpp lib: https://asherikov.github.io/ariles/2/group__ros2param.html ROS2 parameters are not designed to fully reflect yaml structure as explained here https://github.com/ros2/rcl/issues/463, so while ariles can dump and read anything, there are certain workarounds in place that are described in more details in the ROS2 demo [./tests/api_v2/demo_api_v2_ros2.cpp] https://asherikov.github.io/ariles/2/DEMO_ROS2.html.There are also a few utility visitors, e.g.,
compare for class comparison;copyto for copying data to non-ariles classes;copyfrom for copying data from non-ariles classes.The complete list of modules is available at https://asherikov.github.io/ariles/2/modules.html
ariles provides serialization wrappers for the following types:
std::string, std::vector, std::map, std::pair, std::shared_ptr, std::unique_ptr.Eigen types: matrices, transforms, quaternions.Boost classes: boost::optional, boost::movelib::unique_ptr. boost::shared_ptr.cmake >= 3.13C++17 compatible compilerboostVisitors and corresponding dependencies can be enabled or disabled via cmake options, the same applies to data types which depend on external libraries.
ROS1/ROS2 compatible packages are provided in the pkg_ws_2 branch of the main repository -> https://github.com/asherikov/ariles/tree/pkg_ws_2.
std::pair is by default represented in the following way: 
 The default behavior is generic and robust, but some users prefer to use a more compact form provided that the first value is represented by std::string: 
 The alternative behavior can be enabled using sloppy_pairs_ flag in serialization::Parameters. Note that in general it is up to the user to ensure that first_value is a valid map key in the target serialization format. std::map with string keys are handled in a similar way when sloppy_maps_ parameter is enabled. If you are inheriting from a "sloppy" ariles base classes, e.g., ariles2::SloppyBase (see ariles2/extra.h header), both of these flags are enabled by default.
ariles2::Any2 class defined in ariles2/types.h provides functionality similar to protobuf::Any: it allows automatic instantiation and configuration reading of user-defined classes based on their string ids. See tests/api_v2/types/any.h for an example.
If you are having problems figuring out the correct confguration file layout for an ariles class, try writing it first to get an example.
ariles2::rosparam::Reader, but its functionality is more limited.ariles it is more focused on reflection per se rather than applications, for example, it allows to set value by string name of a class member, handles class methods, etc. Ponder does not rely as much on preprocessor macro, but is more verbose.ponder. Partially inspired ariles 2.x.x API.pfr): C++14 library providing tuple like methods for aggregate initializable structures. Addresses a somewhat different but related problem.boost::serialization, https://github.com/USCiLab/cereal.ariles2::namevalueariles2::Any