Chatsync  bbffde5c0c672a526bdc83637acf66dc20a80fbf
config.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <map>
5 #include <memory>
6 #include <vector>
7 
8 namespace channeling {
9 
13  enum class ChannelDirection {
14  Input,
15  Output,
17  };
18 
19  const static std::vector<std::string> ChannelDirectionName = {
20  "input",
21  "output",
22  "bidirectional"
23  };
24 }
25 
26 namespace config {
27  namespace strutil {
31  bool cipred(unsigned char a, unsigned char b);
32 
36  bool cistrcmp(const std::string& a, const std::string& b);
37  }
41  class config_error: public std::runtime_error {
42  public:
43  config_error(std::string const& message) : std::runtime_error(message) {};
44  };
45 
49  class option_error: public config_error {
50  public:
51  option_error(std::string const& message) : config_error(message) {};
52  };
53 
54 
59  class ConfigOption {
60  private:
61  const std::string _value;
62  public:
68  ConfigOption(const std::string&& value) : _value(std::move(value)) {};
69  ConfigOption(const char* value) : _value(value) {};
70 
74  operator std::string() const {return std::string(_value); }
75 
81  operator int() const;
82 
86  operator channeling::ChannelDirection() const;
87  };
88 
92  static const std::string configPrefixData = "data://";
93 
97  static const std::string configPrefixFile = "file://";
98 
114  class ConfigParser {
115  private:
116  const std::unique_ptr<std::map<const std::string, const ConfigOption> const> _config;
117 
130  static const std::string openConfig(const std::string& path);
131  static std::map<const std::string, const ConfigOption> * parseConfig(const std::string& data);
132  public:
138  ConfigParser(const std::string& path);
139 
144  const ConfigOption operator[] (const std::string&& option) const;
145 
152  const ConfigOption get(const std::string&& option, const ConfigOption&& defaultValue) const;
153 
154  };
155 }
option_error(std::string const &message)
Definition: config.hpp:51
ConfigOption(const char *value)
Definition: config.hpp:69
bool cistrcmp(const std::string &a, const std::string &b)
Definition: config.cpp:16
Definition: config.cpp:10
const std::unique_ptr< std::map< const std::string, const ConfigOption > const > _config
Definition: config.hpp:116
static const std::string configPrefixFile
Definition: config.hpp:97
const std::string _value
Definition: config.hpp:61
static const std::vector< std::string > ChannelDirectionName
Definition: config.hpp:19
Definition: channel.cpp:11
static const std::string configPrefixData
Definition: config.hpp:92
ConfigOption(const std::string &&value)
Definition: config.hpp:68
config_error(std::string const &message)
Definition: config.hpp:43
Definition: config.hpp:49
Definition: config.hpp:59
Definition: config.hpp:41
bool cipred(unsigned char a, unsigned char b)
Definition: config.cpp:12
Definition: config.hpp:114
ChannelDirection
Definition: config.hpp:13