diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libutil/config.cc | 28 | ||||
-rw-r--r-- | src/libutil/config.hh | 20 |
2 files changed, 48 insertions, 0 deletions
diff --git a/src/libutil/config.cc b/src/libutil/config.cc index 8e76d6d66..81efcd507 100644 --- a/src/libutil/config.cc +++ b/src/libutil/config.cc @@ -437,6 +437,34 @@ void OptionalPathSetting::operator =(const std::optional<Path> & v) this->assign(v); } +PathsSetting::PathsSetting(Config * options, + const Paths & def, + const std::string & name, + const std::string & description, + const std::set<std::string> & aliases) + : BaseSetting<Paths>(def, true, name, description, aliases) +{ + options->addSetting(this); +} + + +Paths PathsSetting::parse(const std::string & str) const +{ + auto strings = tokenizeString<Strings>(str); + Paths parsed; + + for (auto str : strings) { + parsed.push_back(canonPath(str)); + } + + return parsed; +} + +PathsSetting::operator bool() const noexcept +{ + return !get().empty(); +} + bool GlobalConfig::set(const std::string & name, const std::string & value) { for (auto & config : *configRegistrations) diff --git a/src/libutil/config.hh b/src/libutil/config.hh index 3e232d224..01e1239b3 100644 --- a/src/libutil/config.hh +++ b/src/libutil/config.hh @@ -375,6 +375,26 @@ public: void operator =(const std::optional<Path> & v); }; +/** + * Like `OptionalPathSetting`, but allows multiple paths. + */ +class PathsSetting : public BaseSetting<Paths> +{ +public: + + PathsSetting(Config * options, + const Paths & def, + const std::string & name, + const std::string & description, + const std::set<std::string> & aliases = {}); + + Paths parse(const std::string & str) const override; + + void operator =(const Paths & v); + + operator bool() const noexcept; +}; + struct GlobalConfig : public AbstractConfig { typedef std::vector<Config*> ConfigRegistrations; |