utils: some more convenience for error/result

This commit is contained in:
Dirk-Jan C. Binnema 2022-02-22 23:01:24 +02:00
parent 4990792f02
commit 273f84483a
2 changed files with 25 additions and 1 deletions

View File

@ -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

View File

@ -76,7 +76,29 @@ Err(const Error& err)
return tl::unexpected(err);
}
} // namespace Mu
/*
* convenience
*/
static inline tl::unexpected<Error>
Err(Error::Code errcode, std::string&& msg="")
{
return Err(Error{errcode, std::move(msg)});
}
__attribute__((format(printf, 2, 0)))
static inline tl::unexpected<Error>
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__ */