| /* |
| * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/ |
| * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/ |
| * |
| * Written by Václav Kubernát <kubervac@fit.cvut.cz> |
| * |
| */ |
| |
| #pragma once |
| |
| #include <memory> |
| #include <optional> |
| #include <sysrepo-cpp/Session.hpp> |
| #include "datastore_access.hpp" |
| |
| namespace sysrepo { |
| class Callback; |
| class Connection; |
| class Session; |
| class Subscribe; |
| } |
| class YangSchema; |
| |
| class Recorder { |
| public: |
| virtual ~Recorder(); |
| virtual void write(const std::string& xpath, const std::optional<std::string>& oldValue, const std::optional<std::string>& newValue) = 0; |
| }; |
| |
| class DataSupplier { |
| public: |
| virtual ~DataSupplier(); |
| [[nodiscard]] virtual DatastoreAccess::Tree get_data(const std::string& xpath) const = 0; |
| }; |
| |
| |
| class SysrepoSubscription { |
| public: |
| SysrepoSubscription(const std::string& moduleName, Recorder* rec = nullptr, sr_datastore_t ds = SR_DS_RUNNING); |
| |
| private: |
| std::shared_ptr<sysrepo::Connection> m_connection; |
| std::shared_ptr<sysrepo::Session> m_session; |
| std::shared_ptr<YangSchema> m_schema; |
| std::shared_ptr<sysrepo::Subscribe> m_subscription; |
| }; |
| |
| class OperationalDataSubscription { |
| public: |
| OperationalDataSubscription(const std::string& moduleName, const std::string& path, const DataSupplier& dataSupplier); |
| |
| private: |
| std::shared_ptr<sysrepo::Connection> m_connection; |
| std::shared_ptr<sysrepo::Session> m_session; |
| std::shared_ptr<YangSchema> m_schema; |
| std::shared_ptr<sysrepo::Subscribe> m_subscription; |
| }; |