diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-07 19:10:34 -0500 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-07 19:10:34 -0500 |
commit | 476301116a3ce5818c157ff7efda83ce79b16b81 (patch) | |
tree | 76f97c18b2f3d87182525bd9afad5cfe7e46ccfd /hscript | |
parent | 92b2d500937a985275cee574ba10803b8e949356 (diff) | |
download | horizon-476301116a3ce5818c157ff7efda83ce79b16b81.tar.gz horizon-476301116a3ce5818c157ff7efda83ce79b16b81.tar.bz2 horizon-476301116a3ce5818c157ff7efda83ce79b16b81.tar.xz horizon-476301116a3ce5818c157ff7efda83ce79b16b81.zip |
hscript: Generalise BooleanKey failure mode for all keys
Diffstat (limited to 'hscript')
-rw-r--r-- | hscript/key.cc | 7 | ||||
-rw-r--r-- | hscript/key.hh | 5 | ||||
-rw-r--r-- | hscript/network.cc | 6 |
3 files changed, 12 insertions, 6 deletions
diff --git a/hscript/key.cc b/hscript/key.cc index 74406f6..a677670 100644 --- a/hscript/key.cc +++ b/hscript/key.cc @@ -12,8 +12,11 @@ #include <algorithm> #include "key.hh" +#include "util/output.hh" -bool Horizon::Keys::BooleanKey::parse(const std::string what, bool *out) { +bool Horizon::Keys::BooleanKey::parse(const std::string what, + const std::string where, + const std::string key, bool *out) { std::string lower; std::transform(what.begin(), what.end(), lower.begin(), ::tolower); @@ -22,6 +25,8 @@ bool Horizon::Keys::BooleanKey::parse(const std::string what, bool *out) { } else if(lower == "false" || lower == "no" || lower == "0") { *out = false; } else { + output_error(where, key + ": expected 'true' or 'false'", + "'" + what + "' is not a valid Boolean value"); return false; } return true; diff --git a/hscript/key.hh b/hscript/key.hh index 4817ea5..9c7755b 100644 --- a/hscript/key.hh +++ b/hscript/key.hh @@ -63,10 +63,13 @@ protected: /*! Parse a string into a boolean. * @param what The string to attempt parsing. + * @param where The location of the key. + * @param key The name of the key. * @param out Output variable: will contain the value. * @returns true if value is parsed successfully, false otherwise. */ - static bool parse(const std::string what, bool *out); + static bool parse(const std::string what, const std::string where, + const std::string key, bool *out); public: /*! Determines if the Key is set or not. * @returns true if the Key is truthy, false otherwise. diff --git a/hscript/network.cc b/hscript/network.cc index 8f79d96..9456d09 100644 --- a/hscript/network.cc +++ b/hscript/network.cc @@ -17,10 +17,8 @@ using namespace Horizon::Keys; Key *Network::parseFromData(const std::string data, int lineno, int *errors, int *warnings) { bool value; - if(!BooleanKey::parse(data, &value)) { - output_error("installfile:" + std::to_string(lineno), - "network: expected 'true' or 'false'", - "'" + data + "' is not a valid Boolean value"); + if(!BooleanKey::parse(data, "installfile:" + std::to_string(lineno), + "network", &value)) { if(errors) *errors += 1; return nullptr; } |