Bug 1731801 - Allow ToResult to return other nsresult like error types; r=glandium

Differential Revision: https://phabricator.services.mozilla.com/D126270
This commit is contained in:
Jan Varga 2021-10-11 08:34:01 +00:00
parent 846b87a781
commit ae30add3b8
2 changed files with 18 additions and 6 deletions

View File

@ -39,7 +39,8 @@ class [[nodiscard]] GenericErrorResult<nsresult> {
};
// Allow MOZ_TRY to handle `PRStatus` values.
inline Result<Ok, nsresult> ToResult(PRStatus aValue);
template <typename E = nsresult>
inline Result<Ok, E> ToResult(PRStatus aValue);
} // namespace mozilla
@ -47,18 +48,28 @@ inline Result<Ok, nsresult> ToResult(PRStatus aValue);
namespace mozilla {
inline Result<Ok, nsresult> ToResult(nsresult aValue) {
template <typename ResultType>
struct ResultTypeTraits;
template <>
struct ResultTypeTraits<nsresult> {
static nsresult From(nsresult aValue) { return aValue; }
};
template <typename E>
inline Result<Ok, E> ToResult(nsresult aValue) {
if (NS_FAILED(aValue)) {
return Err(aValue);
return Err(ResultTypeTraits<E>::From(aValue));
}
return Ok();
}
inline Result<Ok, nsresult> ToResult(PRStatus aValue) {
template <typename E>
inline Result<Ok, E> ToResult(PRStatus aValue) {
if (aValue == PR_SUCCESS) {
return Ok();
}
return Err(NS_ERROR_FAILURE);
return Err(ResultTypeTraits<E>::From(NS_ERROR_FAILURE));
}
namespace detail {

View File

@ -243,7 +243,8 @@ template <typename V, typename E>
class Result;
// Allow MOZ_TRY to handle `nsresult` values.
inline Result<Ok, nsresult> ToResult(nsresult aValue);
template <typename E = nsresult>
inline Result<Ok, E> ToResult(nsresult aValue);
} // namespace mozilla
/*