Add a mIsRquired field

This commit is contained in:
Mio 2019-08-06 20:48:51 +08:00
parent 1635efdc44
commit 39c720e6c0

View File

@ -102,6 +102,11 @@ public:
return *this; return *this;
} }
Argument& required() {
mIsRequired = true;
return *this;
}
Argument& implicit_value(std::any aImplicitValue) { Argument& implicit_value(std::any aImplicitValue) {
mImplicitValue = std::move(aImplicitValue); mImplicitValue = std::move(aImplicitValue);
mNumArgs = 0; mNumArgs = 0;
@ -158,6 +163,16 @@ public:
} }
else { else {
// TODO: check if an implicit value was programmed for this argument // TODO: check if an implicit value was programmed for this argument
if (!mIsUsed && !mDefaultValue.has_value() && mIsRequired) {
std::stringstream stream;
stream << "error: " << mNames[0] << ": required.";
throw std::runtime_error(stream.str());
}
if (mIsUsed && mIsRequired && mValues.size() == 0) {
std::stringstream stream;
stream << "error: " << mUsedName << ": no value provided.";
throw std::runtime_error(stream.str());
}
} }
} }
else { else {
@ -298,6 +313,7 @@ public:
std::vector<std::string> mRawValues; std::vector<std::string> mRawValues;
size_t mNumArgs = 1; size_t mNumArgs = 1;
bool mIsOptional = false; bool mIsOptional = false;
bool mIsRequired = false;
bool mIsUsed = false; // relevant for optional arguments. True if used by user bool mIsUsed = false; // relevant for optional arguments. True if used by user
public: public: