Add ProxyDatastore

This class will be used to intercept certain commands from the cli, like
entering RPC input. Right now, it works just as a pass-through.

Change-Id: I2d252609c1354005a0ccf4a1f26399dc895a73e8
diff --git a/src/proxy_datastore.hpp b/src/proxy_datastore.hpp
new file mode 100644
index 0000000..0ed5e2d
--- /dev/null
+++ b/src/proxy_datastore.hpp
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2020 CESNET, https://photonics.cesnet.cz/
+ *
+ * Written by Václav Kubernát <kubernat@cesnet.cz>
+ *
+*/
+
+#pragma once
+#include "datastore_access.hpp"
+
+/*! \class ProxyDatastore
+ *     \brief DatastoreAccess wrapper that handles RPC input
+ */
+class ProxyDatastore {
+public:
+    ProxyDatastore(const std::shared_ptr<DatastoreAccess>& datastore);
+    [[nodiscard]] DatastoreAccess::Tree getItems(const std::string& path) const;
+    void setLeaf(const std::string& path, leaf_data_ value);
+    void createItem(const std::string& path);
+    void deleteItem(const std::string& path);
+    void moveItem(const std::string& source, std::variant<yang::move::Absolute, yang::move::Relative> move);
+    void commitChanges();
+    void discardChanges();
+    void copyConfig(const Datastore source, const Datastore destination);
+    [[nodiscard]] std::string dump(const DataFormat format) const;
+
+    [[nodiscard]] std::shared_ptr<Schema> schema() const;
+private:
+    std::shared_ptr<DatastoreAccess> m_datastore;
+};