onnxruntime/winml/lib/Api.Ort/OnnxruntimeErrors.h
Justin Chu eeef157888
Format c++ code under winml/ (#16660)
winml/ was previously excluded from lintrunner config. This change
includes the directory and adds the clang-format config file specific to
winml/ that fits existing style.

---------

Signed-off-by: Justin Chu <justinchu@microsoft.com>
2023-07-25 21:56:50 -07:00

66 lines
3.8 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include "pch.h"
#include "core/providers/winml/winml_provider_factory.h"
#ifdef _WIN32
inline HRESULT OrtErrorCodeToHRESULT(OrtErrorCode status) noexcept {
switch (status) {
case OrtErrorCode::ORT_OK:
return S_OK;
case OrtErrorCode::ORT_FAIL:
return E_FAIL;
case OrtErrorCode::ORT_INVALID_ARGUMENT:
return E_INVALIDARG;
case OrtErrorCode::ORT_NO_SUCHFILE:
return __HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
case OrtErrorCode::ORT_NO_MODEL:
return __HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
case OrtErrorCode::ORT_ENGINE_ERROR:
return E_FAIL;
case OrtErrorCode::ORT_RUNTIME_EXCEPTION:
return E_FAIL;
case OrtErrorCode::ORT_INVALID_PROTOBUF:
return __HRESULT_FROM_WIN32(ERROR_FILE_CORRUPT);
case OrtErrorCode::ORT_MODEL_LOADED:
return __HRESULT_FROM_WIN32(ERROR_INTERNAL_ERROR);
case OrtErrorCode::ORT_NOT_IMPLEMENTED:
return E_NOTIMPL;
case OrtErrorCode::ORT_INVALID_GRAPH:
return __HRESULT_FROM_WIN32(ERROR_FILE_CORRUPT);
case OrtErrorCode::ORT_EP_FAIL:
return __HRESULT_FROM_WIN32(ERROR_INTERNAL_ERROR);
default:
return E_FAIL;
}
}
#endif
#define RETURN_HR_IF_NOT_OK_MSG(status, ort_api) \
do { \
auto _status = status; \
if (_status) { \
auto error_code = ort_api->GetErrorCode(_status); \
auto error_message = ort_api->GetErrorMessage(_status); \
HRESULT hresult = OrtErrorCodeToHRESULT(error_code); \
telemetry_helper.LogRuntimeError(hresult, std::string(error_message), __FILE__, __FUNCTION__, __LINE__); \
auto message = _winml::Strings::HStringFromUTF8(error_message); \
RoOriginateError(hresult, reinterpret_cast<HSTRING>(winrt::get_abi(message))); \
return hresult; \
} \
} while (0)
#define THROW_IF_NOT_OK_MSG(status, ort_api) \
do { \
auto _status = status; \
if (_status) { \
auto error_code = ort_api->GetErrorCode(_status); \
auto error_message = ort_api->GetErrorMessage(_status); \
HRESULT hresult = OrtErrorCodeToHRESULT(error_code); \
telemetry_helper.LogRuntimeError(hresult, std::string(error_message), __FILE__, __FUNCTION__, __LINE__); \
auto message = _winml::Strings::HStringFromUTF8(error_message); \
throw winrt::hresult_error(hresult, message); \
} \
} while (0)