8#include "lix/libutil/json-fwd.hh"
54 StringMap unknownSettings;
56 AbstractConfig(StringMap initials = {});
64 virtual bool set(
const std::string & name,
const std::string & value,
const ApplyConfigOptions & options = {}) = 0;
69 std::string description;
77 virtual void getSettings(std::map<std::string, SettingInfo> & res,
bool overriddenOnly =
false) = 0;
130class Config :
public AbstractConfig
132 friend class AbstractSetting;
139 AbstractSetting * setting;
142 using Settings = std::map<std::string, SettingData>;
150 Config(StringMap initials = {});
152 bool set(
const std::string & name,
const std::string & value,
const ApplyConfigOptions & options = {})
override;
154 void addSetting(AbstractSetting * setting);
156 void getSettings(std::map<std::string, SettingInfo> & res,
bool overriddenOnly =
false)
override;
162 void convertToArgs(Args & args,
const std::string & category)
override;
171 struct deprecated_t {
172 explicit deprecated_t() =
default;
175 const std::string name;
176 const std::string description;
177 const std::set<std::string> aliases;
181 bool overridden =
false;
183 std::optional<ExperimentalFeature> experimentalFeature;
188 const std::string & name,
189 const std::string & description,
190 const std::set<std::string> & aliases,
191 std::optional<ExperimentalFeature> experimentalFeature = std::nullopt);
193 virtual ~AbstractSetting();
195 virtual void set(
const std::string & value,
bool append =
false,
const ApplyConfigOptions & options = {}) = 0;
203 virtual std::string to_string()
const = 0;
207 virtual std::map<std::string, JSON> toJSONObject()
const;
209 virtual void convertToArg(
Args & args,
const std::string & category);
211 bool isOverridden()
const;
219class BaseSetting :
public AbstractSetting
224 const T defaultValue;
225 const bool documentDefault;
226 const bool deprecated;
247 BaseSetting(
const T & def,
248 const bool documentDefault,
249 const std::string & name,
250 const std::string & description,
251 const std::set<std::string> & aliases = {},
252 std::optional<ExperimentalFeature> experimentalFeature = std::nullopt,
253 bool deprecated =
false)
254 : AbstractSetting(name, description, aliases, experimentalFeature)
257 , documentDefault(documentDefault)
258 , deprecated(deprecated)
261 operator const T &()
const {
return value; }
262 const T & get()
const {
return value; }
264 bool operator ==(
const U & v2)
const {
return value == v2; }
266 bool operator !=(
const U & v2)
const {
return value != v2; }
268 void setDefault(
const U & v) {
if (!overridden) value = v; }
276 void set(
const std::string & str,
bool append =
false,
const ApplyConfigOptions & options = {})
override final;
278 void override(
const T & v);
292 std::string to_string()
const override;
294 void convertToArg(
Args & args,
const std::string & category)
override;
296 std::map<std::string, JSON> toJSONObject()
const override;
300std::ostream & operator <<(std::ostream & str,
const BaseSetting<T> & opt)
302 return str << static_cast<const T &>(opt);
306bool operator ==(
const T & v1,
const BaseSetting<T> & v2) {
return v1 ==
static_cast<const T &
>(v2); }
309class Setting :
public BaseSetting<T>
314 const std::string & name,
315 const std::string & description,
316 const std::set<std::string> & aliases = {},
317 const bool documentDefault =
true,
318 std::optional<ExperimentalFeature> experimentalFeature = std::nullopt,
319 bool deprecated =
false)
320 : BaseSetting<T>(def, documentDefault, name, description, aliases, std::move(experimentalFeature), deprecated)
322 options->addSetting(
this);
332class PathsSetting :
public BaseSetting<T>
335 PathsSetting(
Config * options,
337 const std::string & name,
338 const std::string & description,
339 const std::set<std::string> & aliases = {},
340 const bool documentDefault =
true,
341 std::optional<ExperimentalFeature> experimentalFeature = std::nullopt,
342 bool deprecated =
false)
343 : BaseSetting<T>(def, documentDefault, name, description, aliases, std::move(experimentalFeature), deprecated)
345 options->addSetting(
this);
354 typedef std::vector<Config*> ConfigRegistrations;
355 static ConfigRegistrations * configRegistrations;
357 bool set(
const std::string & name,
const std::string & value,
const ApplyConfigOptions & options = {})
override;
359 void getSettings(std::map<std::string, SettingInfo> & res,
bool overriddenOnly =
false)
override;
369 std::string
toKeyValue(
bool overriddenOnly =
false);
375 Register(
Config * config);
383 #include "feature-settings.gen.inc"
400 bool isEnabled(
const std::optional<ExperimentalFeature> &)
const;
406 void require(
const std::optional<ExperimentalFeature> &)
const;
423 bool isEnabled(
const std::optional<DeprecatedFeature> &)
const;
429 void require(
const std::optional<DeprecatedFeature> &)
const;
Options for applying Config settings.
void warnUnknownSettings()
Definition config.cc:70
void reapplyUnknownSettings()
Definition config.cc:76
virtual void getSettings(std::map< std::string, SettingInfo > &res, bool overriddenOnly=false)=0
void applyConfig(const std::string &contents, const ApplyConfigOptions &options={})
Definition config.cc:159
virtual void resetOverridden()=0
virtual void convertToArgs(Args &args, const std::string &category)=0
virtual bool set(const std::string &name, const std::string &value, const ApplyConfigOptions &options={})=0
virtual bool isAppendable()=0
virtual void appendOrSet(T newValue, bool append, const ApplyConfigOptions &options)
Definition config-impl.hh:62
virtual T parse(const std::string &str, const ApplyConfigOptions &options) const
Definition config-impl.hh:136
bool isAppendable() override final
Definition config-impl.hh:50
void set(const std::string &str, bool append=false, const ApplyConfigOptions &options={}) override final
Definition config-impl.hh:72
void resetOverridden() override
Definition config.cc:175
void getSettings(std::map< std::string, SettingInfo > &res, bool overriddenOnly=false) override
Definition config.cc:84
JSON toJSON() override
Definition config.cc:181
void convertToArgs(Args &args, const std::string &category) override
Definition config.cc:190
bool set(const std::string &name, const std::string &value, const ApplyConfigOptions &options={}) override
Definition config.cc:21
T parse(const std::string &str, const ApplyConfigOptions &options) const override
DeprecatedFeature
Definition deprecated-features.hh:18
ExperimentalFeature
Definition experimental-features.hh:15
Definition apply-config-options.hh:15
Definition globals.cc:313
bool isEnabled(const ExperimentalFeature &) const
Definition config.cc:581
void require(const ExperimentalFeature &) const
Definition config.cc:587
bool set(const std::string &name, const std::string &value, const ApplyConfigOptions &options={}) override
Definition config.cc:518
std::string toKeyValue(bool overriddenOnly=false)
Definition config.cc:548
JSON toJSON() override
Definition config.cc:540
void getSettings(std::map< std::string, SettingInfo > &res, bool overriddenOnly=false) override
Definition config.cc:528
void convertToArgs(Args &args, const std::string &category) override
Definition config.cc:558
void resetOverridden() override
Definition config.cc:534