diff --git a/lib/utils/mu-error.hh b/lib/utils/mu-error.hh index 8baea197..c34bd255 100644 --- a/lib/utils/mu-error.hh +++ b/lib/utils/mu-error.hh @@ -41,6 +41,7 @@ struct Error final : public std::exception { Query, SchemaMismatch, Store, + AssertionFailure }; /** @@ -50,6 +51,7 @@ struct Error final : public std::exception { * #param msgarg the error diecription */ Error(Code codearg, const std::string& msgarg) : code_{codearg}, what_{msgarg} {} + Error(Code codearg, std::string&& msgarg) : code_{codearg}, what_{std::move(msgarg)} {} /** * Build an error from an error-code and a format string diff --git a/lib/utils/mu-result.hh b/lib/utils/mu-result.hh index 8e304fdc..58b2b322 100644 --- a/lib/utils/mu-result.hh +++ b/lib/utils/mu-result.hh @@ -76,7 +76,29 @@ Err(const Error& err) return tl::unexpected(err); } -} // namespace Mu +/* + * convenience + */ + +static inline tl::unexpected +Err(Error::Code errcode, std::string&& msg="") +{ + return Err(Error{errcode, std::move(msg)}); +} + +__attribute__((format(printf, 2, 0))) +static inline tl::unexpected +Err(Error::Code errcode, const char* frm, ...) +{ + va_list args; + va_start(args, frm); + auto str{vformat(frm, args)}; + va_end(args); + + return Err(errcode, std::move(str)); +} + +}// namespace Mu #endif /* MU_RESULT_HH__ */