blob: 36c9388a681023aa8ff92b3097e5b720c622f461 [file] [log] [blame]
Václav Kubernát96344a12018-05-28 16:33:39 +02001/*
2 * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
3 * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
4 *
5 * Written by Václav Kubernát <kubervac@fit.cvut.cz>
6 *
7*/
8
9#pragma once
10
11#include <boost/variant/static_visitor.hpp>
Václav Kubernát812ee282018-08-30 17:10:03 +020012#include "parser.hpp"
Václav Kubernátb4e5b182020-11-16 19:55:09 +010013#include "proxy_datastore.hpp"
Václav Kubernát96344a12018-05-28 16:33:39 +020014
Václav Kubernát4c3d22f2020-06-12 16:05:01 +020015
Václav Kubernát96344a12018-05-28 16:33:39 +020016struct Interpreter : boost::static_visitor<void> {
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020017 Interpreter(Parser& parser, ProxyDatastore& datastore);
Václav Kubernát96344a12018-05-28 16:33:39 +020018
Václav Kubernát812ee282018-08-30 17:10:03 +020019 void operator()(const commit_&) const;
Václav Kubernát07204242018-06-04 18:12:09 +020020 void operator()(const set_&) const;
Václav Kubernátb6ff0b62018-08-30 16:14:53 +020021 void operator()(const get_&) const;
Václav Kubernát96344a12018-05-28 16:33:39 +020022 void operator()(const cd_&) const;
Václav Kubernátb61336d2018-05-28 17:35:03 +020023 void operator()(const create_&) const;
24 void operator()(const delete_&) const;
Václav Kubernát11afac72018-07-18 14:59:53 +020025 void operator()(const ls_&) const;
Václav Kubernát9cfcd872020-02-18 12:34:02 +010026 void operator()(const describe_&) const;
Václav Kubernát6d791432018-10-25 16:00:35 +020027 void operator()(const discard_&) const;
Václav Kubernát054cc992019-02-21 14:23:52 +010028 void operator()(const help_&) const;
Václav Kubernát7160a132020-04-03 02:11:01 +020029 void operator()(const copy_& copy) const;
Václav Kubernátbf65dd72020-05-28 02:32:31 +020030 void operator()(const move_& move) const;
Václav Kubernát70d7f7a2020-06-23 14:40:40 +020031 void operator()(const dump_& dump) const;
Václav Kubernátaa4250a2020-07-22 00:02:23 +020032 void operator()(const prepare_& prepare) const;
Václav Kubernáte7248b22020-06-26 15:38:59 +020033 void operator()(const exec_& exec) const;
34 void operator()(const cancel_& cancel) const;
Václav Kubernát162165e2021-02-22 09:46:53 +010035 void operator()(const switch_& switch_cmd) const;
Václav Kubernátb61336d2018-05-28 17:35:03 +020036
Václav Kubernát96344a12018-05-28 16:33:39 +020037private:
Václav Kubernát59e4ee42020-07-08 17:32:45 +020038 [[nodiscard]] std::string buildTypeInfo(const std::string& path) const;
Václav Kubernát6415b822018-08-22 17:40:01 +020039
Václav Kubernát7e167692020-06-12 09:53:01 +020040 template <typename PathType>
Václav Kubernát4c3d22f2020-06-12 16:05:01 +020041 boost::variant<dataPath_, schemaPath_, module_> toCanonicalPath(const boost::optional<PathType>& path) const;
Václav Kubernát7e167692020-06-12 09:53:01 +020042
43 template <typename PathType>
Václav Kubernát59e4ee42020-07-08 17:32:45 +020044 [[nodiscard]] boost::variant<dataPath_, schemaPath_, module_> toCanonicalPath(const PathType& path) const;
Václav Kubernát7e167692020-06-12 09:53:01 +020045
Václav Kubernát96344a12018-05-28 16:33:39 +020046 Parser& m_parser;
Václav Kubernát48e9dfa2020-07-08 10:55:12 +020047 ProxyDatastore& m_datastore;
Václav Kubernát96344a12018-05-28 16:33:39 +020048};