Prefer visitors when dealing with variants
Change-Id: If55862c17622a57f76c1649ffe8ed35290b17952
diff --git a/src/static_schema.cpp b/src/static_schema.cpp
index 716be65..a1a5602 100644
--- a/src/static_schema.cpp
+++ b/src/static_schema.cpp
@@ -194,6 +194,30 @@
return res;
}
+struct impl_nodeType {
+
+ yang::NodeTypes operator()(const yang::container& cont)
+ {
+ if (cont.m_presence == yang::ContainerTraits::Presence) {
+ return yang::NodeTypes::PresenceContainer;
+ }
+ return yang::NodeTypes::Container;
+ }
+ yang::NodeTypes operator()(const yang::list&)
+ {
+ return yang::NodeTypes::List;
+ }
+ yang::NodeTypes operator()(const yang::leaf&)
+ {
+ return yang::NodeTypes::Leaf;
+
+ }
+ yang::NodeTypes operator()(const yang::leaflist&)
+ {
+ return yang::NodeTypes::LeafList;
+ }
+};
+
yang::NodeTypes StaticSchema::nodeType(const schemaPath_& location, const ModuleNodePair& node) const
{
std::string locationString = pathToSchemaString(location, Prefixes::Always);
@@ -201,27 +225,7 @@
try {
auto targetNode = children(locationString).at(fullName);
- if (std::holds_alternative<yang::container>(targetNode.m_nodeType)) {
- if (std::get<yang::container>(targetNode.m_nodeType).m_presence == yang::ContainerTraits::Presence) {
- return yang::NodeTypes::PresenceContainer;
- }
- return yang::NodeTypes::Container;
- }
-
- if (std::holds_alternative<yang::list>(targetNode.m_nodeType)) {
- return yang::NodeTypes::List;
- }
-
- if (std::holds_alternative<yang::leaf>(targetNode.m_nodeType)) {
- return yang::NodeTypes::Leaf;
- }
-
- if (std::holds_alternative<yang::leaflist>(targetNode.m_nodeType)) {
- return yang::NodeTypes::LeafList;
- }
-
- throw std::runtime_error{"StaticSchema::nodeType: unsupported type"};
-
+ return std::visit(impl_nodeType{}, targetNode.m_nodeType);
} catch (std::out_of_range&) {
throw InvalidNodeException();
}