/* Copyright 2012. Bloomberg Finance L.P.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:  The above
 * copyright notice and this permission notice shall be included in all copies
 * or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 */

/** \file blpapi_error.h */
/** \defgroup blpapi_error Component blpapi_error
\brief Provide a collection of errors that library can return
\file blpapi_error.h
\brief Provide a collection of errors that library can return
*/

#ifndef INCLUDED_BLPAPI_ERROR
#define INCLUDED_BLPAPI_ERROR

/** \addtogroup blpapi
 * @{
 */
/** \addtogroup blpapi_error
 * @{
 * <A NAME="purpose"></A>
 * <A NAME="1"> \par Purpose: </A>
 * Provide a collection of errors that library can return
 * \par
 * \par
 * <A NAME="description"></A>
 * <A NAME="2"> \par Description: </A>
 *  This component provides a collection of preprocessor macros
 * that define the errors that library can generate.
 */
/** @} */
/** @} */

#ifndef INCLUDED_BLPAPI_DEFS
#include <blpapi_defs.h>
#endif

#define BLPAPI_RESULTCODE(res) ((res) & 0xffff)
#define BLPAPI_RESULTCLASS(res) ((res) & 0xff0000)

#define BLPAPI_UNKNOWN_CLASS 0x00000
#define BLPAPI_INVALIDSTATE_CLASS 0x10000
#define BLPAPI_INVALIDARG_CLASS 0x20000
#define BLPAPI_IOERROR_CLASS 0x30000
#define BLPAPI_CNVERROR_CLASS 0x40000
#define BLPAPI_BOUNDSERROR_CLASS 0x50000
#define BLPAPI_NOTFOUND_CLASS 0x60000
#define BLPAPI_FLDNOTFOUND_CLASS 0x70000
#define BLPAPI_UNSUPPORTED_CLASS 0x80000

#define BLPAPI_ERROR_UNKNOWN (BLPAPI_UNKNOWN_CLASS | 1)
#define BLPAPI_ERROR_ILLEGAL_ARG (BLPAPI_INVALIDARG_CLASS | 2)
#define BLPAPI_ERROR_ILLEGAL_ACCESS (BLPAPI_UNSUPPORTED_CLASS | 3)
#define BLPAPI_ERROR_INVALID_SESSION (BLPAPI_INVALIDARG_CLASS | 4)
#define BLPAPI_ERROR_DUPLICATE_CORRELATIONID (BLPAPI_INVALIDARG_CLASS | 5)
#define BLPAPI_ERROR_INTERNAL_ERROR (BLPAPI_UNKNOWN_CLASS | 6)
#define BLPAPI_ERROR_RESOLVE_FAILED (BLPAPI_IOERROR_CLASS | 7)
#define BLPAPI_ERROR_CONNECT_FAILED (BLPAPI_IOERROR_CLASS | 8)
#define BLPAPI_ERROR_ILLEGAL_STATE (BLPAPI_INVALIDSTATE_CLASS | 9)
#define BLPAPI_ERROR_CODEC_FAILURE (BLPAPI_UNKNOWN_CLASS | 10)
#define BLPAPI_ERROR_INDEX_OUT_OF_RANGE (BLPAPI_BOUNDSERROR_CLASS | 11)
#define BLPAPI_ERROR_INVALID_CONVERSION (BLPAPI_CNVERROR_CLASS | 12)
#define BLPAPI_ERROR_ITEM_NOT_FOUND (BLPAPI_NOTFOUND_CLASS | 13)
#define BLPAPI_ERROR_IO_ERROR (BLPAPI_IOERROR_CLASS | 14)
#define BLPAPI_ERROR_CORRELATION_NOT_FOUND (BLPAPI_NOTFOUND_CLASS | 15)
#define BLPAPI_ERROR_SERVICE_NOT_FOUND (BLPAPI_NOTFOUND_CLASS | 16)
#define BLPAPI_ERROR_LOGON_LOOKUP_FAILED (BLPAPI_UNKNOWN_CLASS | 17)
#define BLPAPI_ERROR_DS_LOOKUP_FAILED (BLPAPI_UNKNOWN_CLASS | 18)
#define BLPAPI_ERROR_UNSUPPORTED_OPERATION (BLPAPI_UNSUPPORTED_CLASS | 19)
#define BLPAPI_ERROR_DS_PROPERTY_NOT_FOUND (BLPAPI_NOTFOUND_CLASS | 20)
#define BLPAPI_ERROR_MSG_TOO_LARGE (BLPAPI_INVALIDARG_CLASS | 21)

#ifdef __cplusplus
extern "C" {
#endif

BLPAPI_EXPORT
const char *blpapi_getLastErrorDescription(int resultCode);

#ifdef __cplusplus
}

/** \addtogroup blpapi
 * @{
 */
/** \addtogroup blpapi_error
 * @{
 */

namespace BloombergLP {
namespace blpapi {

} // close namespace blpapi
} // close namespace BloombergLP

/** @} */
/** @} */

#endif

#endif // #ifndef INCLUDED_BLPAPI_ERROR
