2#include <RobotRaconteur/DataTypes.h>
3#include "yaml-cpp/yaml.h"
5namespace RobotRaconteur
15T parse_structure(
const YAML::Node& node,
const std::string& key,
bool optional)
19 return node[key].as<T>();
29 throw RobotRaconteur::InvalidArgumentException(
"Key not found: " + key);
35class parse_structure_container_traits
40struct parse_structure_container_traits<boost::intrusive_ptr<T> >
43 static RobotRaconteur::RRListPtr<T> parse_structure_list(
const YAML::Node& node,
const std::string& key,
48 RobotRaconteur::RRListPtr<T> ret = RobotRaconteur::AllocateEmptyRRList<T>();
49 auto val = node[key].as<std::list<boost::intrusive_ptr<T> > >();
50 std::copy(val.begin(), val.end(), std::back_inserter(*ret));
57 return RobotRaconteur::RRListPtr<T>();
61 throw RobotRaconteur::InvalidArgumentException(
"Key not found: " + key);
66 static RobotRaconteur::RRMapPtr<int32_t, T> parse_structure_map_int32(
const YAML::Node& node,
67 const std::string& key,
bool optional)
71 RobotRaconteur::RRMapPtr<int32_t, T> ret = RobotRaconteur::AllocateEmptyRRMap<int32_t, T>();
72 auto val = node[key].as<std::map<int32_t, boost::intrusive_ptr<T> > >();
74 ret->insert(val.begin(), val.end());
81 return RobotRaconteur::RRMapPtr<int32_t, T>();
85 throw RobotRaconteur::InvalidArgumentException(
"Key not found: " + key);
90 static RobotRaconteur::RRMapPtr<std::string, T> parse_structure_map_string(
const YAML::Node& node,
91 const std::string& key,
bool optional)
95 RobotRaconteur::RRMapPtr<std::string, T> ret = RobotRaconteur::AllocateEmptyRRMap<std::string, T>();
96 auto val = node[key].as<std::map<std::string, boost::intrusive_ptr<T> > >();
98 ret->insert(val.begin(), val.end());
105 return RobotRaconteur::RRMapPtr<std::string, T>();
109 throw RobotRaconteur::InvalidArgumentException(
"Key not found: " + key);
116RobotRaconteur::RRListPtr<typename parse_structure_container_traits<T>::type> parse_structure_list(
117 const YAML::Node& node,
const std::string& key,
bool optional)
119 return parse_structure_container_traits<T>::parse_structure_list(node, key, optional);
123RobotRaconteur::RRMapPtr<int32_t, typename parse_structure_container_traits<T>::type> parse_structure_map_int32(
124 const YAML::Node& node,
const std::string& key,
bool optional)
126 return parse_structure_container_traits<T>::parse_structure_map_int32(node, key, optional);
130RobotRaconteur::RRMapPtr<std::string, typename parse_structure_container_traits<T>::type> parse_structure_map_string(
131 const YAML::Node& node,
const std::string& key,
bool optional)
133 return parse_structure_container_traits<T>::parse_structure_map_string(node, key, optional);