Add datastore support for YANG actions
Change-Id: I15b96f70ce89b7bbe3ac0fefb7b018374eeabd84
diff --git a/src/sysrepo_access.cpp b/src/sysrepo_access.cpp
index 510c530..e792ed8 100644
--- a/src/sysrepo_access.cpp
+++ b/src/sysrepo_access.cpp
@@ -311,24 +311,44 @@
}
}
-DatastoreAccess::Tree SysrepoAccess::executeRpc(const std::string &path, const Tree &input)
+namespace {
+std::shared_ptr<sysrepo::Vals> toSrVals(const std::string& path, const DatastoreAccess::Tree& input)
{
- auto srInput = std::make_shared<sysrepo::Vals>(input.size());
+ auto res = std::make_shared<sysrepo::Vals>(input.size());
{
size_t i = 0;
for (const auto& [k, v] : input) {
- boost::apply_visitor(updateSrValFromValue(joinPaths(path, k), srInput->val(i)), v);
+ boost::apply_visitor(updateSrValFromValue(joinPaths(path, k), res->val(i)), v);
++i;
}
}
- auto output = m_session->rpc_send(path.c_str(), srInput);
- Tree res;
+ return res;
+}
+
+DatastoreAccess::Tree toTree(const std::string& path, const std::shared_ptr<sysrepo::Vals>& output)
+{
+ DatastoreAccess::Tree res;
for (size_t i = 0; i < output->val_cnt(); ++i) {
const auto& v = output->val(i);
res.emplace_back(std::string(v->xpath()).substr(joinPaths(path, "/").size()), leafValueFromVal(v));
}
return res;
}
+}
+
+DatastoreAccess::Tree SysrepoAccess::executeRpc(const std::string &path, const Tree &input)
+{
+ auto srInput = toSrVals(path, input);
+ auto output = m_session->rpc_send(path.c_str(), srInput);
+ return toTree(path, output);
+}
+
+DatastoreAccess::Tree SysrepoAccess::executeAction(const std::string& path, const Tree& input)
+{
+ auto srInput = toSrVals(path, input);
+ auto output = m_session->action_send(path.c_str(), srInput);
+ return toTree(path, output);
+}
void SysrepoAccess::copyConfig(const Datastore source, const Datastore destination)
{