20#include "auto_apms_behavior_tree_core/node/node_registration_options.hpp"
21#include "auto_apms_util/exceptions.hpp"
22#include "auto_apms_util/yaml.hpp"
33struct convert<auto_apms_behavior_tree::core::NodeManifest>
35 using Manifest = auto_apms_behavior_tree::core::NodeManifest;
36 static Node encode(
const Manifest & rhs);
37 static bool decode(
const Node & node, Manifest & lhs);
114 using Map = std::map<std::string, NodeRegistrationOptions>;
149 void toFile(
const std::string & file_path)
const;
156 bool contains(
const std::string & node_name)
const;
164 RegistrationOptions &
operator[](
const std::string & node_name);
167 const RegistrationOptions &
operator[](
const std::string & node_name)
const;
177 NodeManifest &
add(
const std::string & node_name,
const RegistrationOptions & opt);
234inline Node convert<auto_apms_behavior_tree::core::NodeManifest>::encode(
const Manifest & rhs)
236 Node node(NodeType::Map);
237 for (
const auto & [name, params] : rhs.map()) node[name] = params;
240inline bool convert<auto_apms_behavior_tree::core::NodeManifest>::decode(
const Node & node, Manifest & rhs)
243 throw auto_apms_util::exceptions::YAMLFormatError(
244 "YAML::Node for auto_apms_behavior_tree::core::NodeManifest must be map but is type " +
245 std::to_string(node.Type()) +
" (0: Undefined - 1: Null - 2: Scalar - 3: Sequence - 4: Map).");
247 for (
auto it = node.begin(); it != node.end(); ++it) {
248 const auto & name = it->first.as<std::string>();
250 rhs.add(name, it->second.as<Manifest::RegistrationOptions>());
251 }
catch (
const std::exception & e) {
252 throw auto_apms_util::exceptions::YAMLFormatError(
253 "Node registration parameters for node '" + name +
"' are invalid: " + e.what());
Data structure for information about which behavior tree node plugin to load and how to configure the...
std::map< std::string, NodeRegistrationOptions > Map
Mapping of a node's name and its registration parameters.
static NodeManifest fromFiles(const std::vector< std::string > &paths)
Create a node plugin manifest from multiple files. They are loaded in the given order.
size_t size() const
Get the number of behavior tree nodes this manifest holds registration options for.
NodeManifest & add(const std::string &node_name, const RegistrationOptions &opt)
Add registration options for a behavior tree node to the manifest.
bool contains(const std::string &node_name) const
Determine if a behavior tree node has been added to the manifest.
bool empty() const
Determine whether any node registration options have been added to the manifest.
NodeManifest & merge(const NodeManifest &other, bool replace=false)
Merges another NodeManifest with this one.
static NodeManifest fromResourceIdentity(const std::string &identity)
Create a node manifest from an installed resource.
const Map & map() const
Get a view of the internal map.
std::vector< std::string > getNodeNames()
Get all names of the behavior tree nodes specified by the manifest.
RegistrationOptions & operator[](const std::string &node_name)
Access the node manifest and retrieve registration options for a specific behavior tree node.
void toFile(const std::string &file_path) const
Write the node manifest to a file.
NodeManifest(const Map &map={})
Constructor of a NodeManifest data structure.
NodeManifest & remove(const std::string &node_name)
Remove registration options for a behavior tree node.
#define AUTO_APMS_UTIL_DEFINE_YAML_CONVERSION_METHODS(ClassType)
Macro for defining YAML encode/decode methods for a class.
Core API for AutoAPMS's behavior tree implementation.
Parameters for loading and registering a behavior tree node class from a shared library using e....