feat(config): Add fallback support to local value references
This commit is contained in:
parent
ca64affa1a
commit
febe6997b6
@ -227,8 +227,11 @@ class config {
|
|||||||
/**
|
/**
|
||||||
* Dereference local value reference defined using:
|
* Dereference local value reference defined using:
|
||||||
* ${root.key}
|
* ${root.key}
|
||||||
|
* ${root.key:fallback}
|
||||||
* ${self.key}
|
* ${self.key}
|
||||||
|
* ${self.key:fallback}
|
||||||
* ${section.key}
|
* ${section.key}
|
||||||
|
* ${section.key:fallback}
|
||||||
*/
|
*/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T dereference_local(string section, const string& key, const string& current_section) const {
|
T dereference_local(string section, const string& key, const string& current_section) const {
|
||||||
@ -245,7 +248,13 @@ class config {
|
|||||||
T result{convert<T>(string{string_value})};
|
T result{convert<T>(string{string_value})};
|
||||||
return dereference<T>(string(section), move(key), move(string_value), move(result));
|
return dereference<T>(string(section), move(key), move(string_value), move(result));
|
||||||
} catch (const key_error& err) {
|
} catch (const key_error& err) {
|
||||||
throw value_error("Unexisting reference defined at [" + section + "." + key + "]");
|
size_t pos;
|
||||||
|
if ((pos = key.find(':')) != string::npos) {
|
||||||
|
string fallback = key.substr(pos + 1);
|
||||||
|
m_log.info("The reference ${%s.%s} does not exist, using defined fallback value \"%s\"", section, key.substr(0, pos), fallback);
|
||||||
|
return convert<T>(move(fallback));
|
||||||
|
}
|
||||||
|
throw value_error("The reference ${" + section + "." + key + "} does not exist (no fallback set)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,7 +268,7 @@ class config {
|
|||||||
size_t pos;
|
size_t pos;
|
||||||
string env_default;
|
string env_default;
|
||||||
|
|
||||||
if ((pos = var.find(":")) != string::npos) {
|
if ((pos = var.find(':')) != string::npos) {
|
||||||
env_default = var.substr(pos + 1);
|
env_default = var.substr(pos + 1);
|
||||||
var.erase(pos);
|
var.erase(pos);
|
||||||
}
|
}
|
||||||
@ -286,7 +295,7 @@ class config {
|
|||||||
size_t pos;
|
size_t pos;
|
||||||
#if not WITH_XRM
|
#if not WITH_XRM
|
||||||
m_log.warn("No built-in support for xrdb (requires xcb-util-xrm). Using default value for `%s`", var);
|
m_log.warn("No built-in support for xrdb (requires xcb-util-xrm). Using default value for `%s`", var);
|
||||||
if ((pos = var.find(":")) != string::npos) {
|
if ((pos = var.find(':')) != string::npos) {
|
||||||
return convert<T>(var.substr(pos + 1));
|
return convert<T>(var.substr(pos + 1));
|
||||||
}
|
}
|
||||||
return convert<T>("");
|
return convert<T>("");
|
||||||
@ -296,7 +305,7 @@ class config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
string fallback;
|
string fallback;
|
||||||
if ((pos = var.find(":")) != string::npos) {
|
if ((pos = var.find(':')) != string::npos) {
|
||||||
fallback = var.substr(pos + 1);
|
fallback = var.substr(pos + 1);
|
||||||
var.erase(pos);
|
var.erase(pos);
|
||||||
}
|
}
|
||||||
@ -324,7 +333,7 @@ class config {
|
|||||||
T dereference_file(string var) const {
|
T dereference_file(string var) const {
|
||||||
size_t pos;
|
size_t pos;
|
||||||
string fallback;
|
string fallback;
|
||||||
if ((pos = var.find(":")) != string::npos) {
|
if ((pos = var.find(':')) != string::npos) {
|
||||||
fallback = var.substr(pos + 1);
|
fallback = var.substr(pos + 1);
|
||||||
var.erase(pos);
|
var.erase(pos);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user