File: config.hpp

package info (click to toggle)
waybar 0.15.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,464 kB
  • sloc: cpp: 25,331; xml: 742; python: 146; ansic: 77; makefile: 29
file content (45 lines) | stat: -rw-r--r-- 1,303 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#pragma once

#include <json/json.h>

#include <optional>
#include <string>

#ifndef SYSCONFDIR
#define SYSCONFDIR "/etc"
#endif

namespace waybar {

class Config {
 public:
  static const std::vector<std::string> CONFIG_DIRS;
  static const char* CONFIG_PATH_ENV;

  /* Try to find any of provided names in the supported set of config directories */
  static std::optional<std::string> findConfigPath(
      const std::vector<std::string>& names, const std::vector<std::string>& dirs = CONFIG_DIRS);

  static std::vector<std::string> tryExpandPath(const std::string& base,
                                                const std::string& filename);

  Config() = default;

  void load(const std::string& config);

  Json::Value& getConfig() { return config_; }

  std::vector<Json::Value> getOutputConfigs(const std::string& name, const std::string& identifier);

 private:
  void setupConfig(Json::Value& dst, const std::string& config_file, int depth);
  void resolveConfigIncludes(Json::Value& config, int depth);
  void mergeConfig(Json::Value& a_config_, Json::Value& b_config_);
  static std::vector<std::string> findIncludePath(
      const std::string& name, const std::vector<std::string>& dirs = CONFIG_DIRS);

  std::string config_file_;

  Json::Value config_;
};
}  // namespace waybar