Custom error validator (#540)

Fixes #541
This commit is contained in:
cyan317
2023-03-15 17:19:57 +00:00
committed by GitHub
parent bc438ce58a
commit 9d10cff873
2 changed files with 60 additions and 0 deletions

View File

@@ -377,6 +377,36 @@ private:
validator_;
};
/**
* @brief A meta-validator that wrapp other validator to send the customized
* error
*/
template <typename Requirement>
class WithCustomError final
{
Requirement requirement;
RPC::Status error;
public:
/**
* @brief Constructs a validator that calls the given validator "req" and
* return customized error "err"
*/
WithCustomError(Requirement req, RPC::Status err)
: requirement{std::move(req)}, error{err}
{
}
[[nodiscard]] MaybeError
verify(boost::json::value const& value, std::string_view key) const
{
if (auto const res = requirement.verify(value, key); not res)
return Error{error};
return {};
}
};
/**
* @brief A meta-validator that allows to specify a custom validation function
*/