39 #define CONSTRUCT_ERROR_ID_VALUE(MODULE_ID, ERROR_ID) ( (1U << 31) | ( (MODULE_ID & kErrorModuleIdMask) << 16) | (ERROR_ID & kErrorIdMask) ) 44 #define CONSTRUCT_WARNING_ID_VALUE(MODULE_ID, ERROR_ID) ( (0U << 31) | ( (MODULE_ID & kErrorModuleIdMask) << 16) | (ERROR_ID & kErrorIdMask) ) 49 #define GET_MODULE_ID(ec) ( (ec >> 16) & kErrorModuleIdMask ) 54 #define GET_ERROR_ID(ec) ( ec & kErrorIdMask ) 88 #define TTV_CORE_ERROR_IDS\ 90 BEGIN_WARNING_IDS(TTV_WRN_BEGIN_WARNINGS)\ 91 USE_TTV_WARNING_ID(TTV_WRN_MUTEX_LOCKED)\ 92 USE_TTV_WARNING_ID(TTV_WRN_NOTENOUGHDATA)\ 93 USE_TTV_WARNING_ID(TTV_WRN_MUTEX_NOT_ACQUIRED)\ 94 USE_TTV_WARNING_ID(TTV_WRN_CONDITION_WAIT_FAILED)\ 95 USE_TTV_WARNING_ID(TTV_WRN_DEPRECATED)\ 96 USE_TTV_WARNING_ID(TTV_WRN_WAIT_TIMEOUT) \ 97 USE_TTV_WARNING_ID(TTV_WRN_OAUTH_SCOPES_MISSING)\ 98 END_WARNING_IDS(TTV_WRN_END_WARNINGS)\ 101 USE_TTV_SUCCESS_ID(TTV_EC_SUCCESS)\ 104 BEGIN_ERROR_IDS(TTV_EC_BEGIN_ERRORS)\ 105 USE_TTV_ERROR_ID(TTV_EC_UNKNOWN_ERROR)\ 106 USE_TTV_ERROR_ID(TTV_EC_CANNOT_OPEN_FILE)\ 107 USE_TTV_ERROR_ID(TTV_EC_ALREADY_INITIALIZED)\ 108 USE_TTV_ERROR_ID(TTV_EC_CANNOT_WRITE_TO_FILE)\ 109 USE_TTV_ERROR_ID(TTV_EC_CANNOT_CREATE_MUTEX)\ 110 USE_TTV_ERROR_ID(TTV_EC_CANNOT_DESTROY_MUTEX)\ 111 USE_TTV_ERROR_ID(TTV_EC_COULD_NOT_TAKE_MUTEX)\ 112 USE_TTV_ERROR_ID(TTV_EC_COULD_NOT_RELEASE_MUTEX)\ 113 USE_TTV_ERROR_ID(TTV_EC_INVALID_MUTEX)\ 114 USE_TTV_ERROR_ID(TTV_EC_WAIT_TIMED_OUT)\ 115 USE_TTV_ERROR_ID(TTV_EC_INVALID_ARG)\ 116 USE_TTV_ERROR_ID(TTV_EC_INVALID_FORMAT)\ 117 USE_TTV_ERROR_ID(TTV_EC_NOT_INITIALIZED)\ 118 USE_TTV_ERROR_ID(TTV_EC_AUTHENTICATION)\ 119 USE_TTV_ERROR_ID(TTV_EC_FORBIDDEN)\ 120 USE_TTV_ERROR_ID(TTV_EC_OAUTHTOKEN_MISSING_SCOPES)\ 121 USE_TTV_ERROR_ID(TTV_EC_INVALID_OAUTHTOKEN)\ 122 USE_TTV_ERROR_ID(TTV_EC_USERINFO_NOT_AVAILABLE)\ 123 USE_TTV_ERROR_ID(TTV_EC_NOT_AVAILABLE)\ 124 USE_TTV_ERROR_ID(TTV_EC_PARAMETERS_CHANGED)\ 125 USE_TTV_ERROR_ID(TTV_EC_MEMORY)\ 126 USE_TTV_ERROR_ID(TTV_EC_ALIGN16_REQUIRED)\ 127 USE_TTV_ERROR_ID(TTV_EC_HTTPREQUEST_ERROR)\ 128 USE_TTV_ERROR_ID(TTV_EC_RATE_LIMITED)\ 129 USE_TTV_ERROR_ID(TTV_EC_NO_FACTORIES_REGISTERED)\ 130 USE_TTV_ERROR_ID(TTV_EC_INVALID_CLIENTID)\ 131 USE_TTV_ERROR_ID(TTV_EC_INVALID_CHANNEL_ID)\ 132 USE_TTV_ERROR_ID(TTV_EC_API_REQUEST_FAILED)\ 133 USE_TTV_ERROR_ID(TTV_EC_API_REQUEST_TIMEDOUT)\ 134 USE_TTV_ERROR_ID(TTV_EC_INVALID_HTTP_REQUEST_PARAMS)\ 135 USE_TTV_ERROR_ID(TTV_EC_COINITIALIZE_FAIED)\ 136 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_INVALID_JSON)\ 137 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_AUTHTOKEN)\ 138 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_STREAMKEY)\ 139 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_CHANNELNAME)\ 140 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_INGESTS)\ 141 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_RECORDING_STATUS)\ 142 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_STREAMINFO)\ 143 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_INVALID_VIEWERS)\ 144 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_USERNAME)\ 145 USE_TTV_ERROR_ID(TTV_EC_WEBAPI_RESULT_NO_USER_DISPLAY_NAME)\ 146 USE_TTV_ERROR_ID(TTV_EC_NEED_TO_LOGIN)\ 147 USE_TTV_ERROR_ID(TTV_EC_INVALID_LOGIN) \ 148 USE_TTV_ERROR_ID(TTV_EC_INVALID_USERID) \ 149 USE_TTV_ERROR_ID(TTV_EC_INVALID_BUFFER)\ 150 USE_TTV_ERROR_ID(TTV_EC_INVALID_CALLBACK)\ 151 USE_TTV_ERROR_ID(TTV_EC_INVALID_JSON)\ 152 USE_TTV_ERROR_ID(TTV_EC_INVALID_STATE)\ 153 USE_TTV_ERROR_ID(TTV_EC_CANNOT_SUSPEND_THREADSYNC)\ 154 USE_TTV_ERROR_ID(TTV_EC_CANNOT_SIGNAL_THREADSYNC)\ 155 USE_TTV_ERROR_ID(TTV_EC_REQUEST_TIMEDOUT)\ 156 USE_TTV_ERROR_ID(TTV_EC_REQUEST_PENDING)\ 158 USE_TTV_ERROR_ID(TTV_EC_OS_TOO_OLD)\ 159 USE_TTV_ERROR_ID(TTV_EC_SHUTTING_DOWN)\ 160 USE_TTV_ERROR_ID(TTV_EC_SHUT_DOWN)\ 161 USE_TTV_ERROR_ID(TTV_EC_UNIMPLEMENTED)\ 162 USE_TTV_ERROR_ID(TTV_EC_ALREADY_LOGGED_IN)\ 163 USE_TTV_ERROR_ID(TTV_EC_ALREADY_CACHED)\ 164 USE_TTV_ERROR_ID(TTV_EC_FEATURE_DISABLED)\ 165 USE_TTV_ERROR_ID(TTV_EC_UNSUPPORTED)\ 166 USE_TTV_ERROR_ID(TTV_EC_INVALID_INSTANCE)\ 168 USE_TTV_ERROR_ID(TTV_EC_SOCKET_EWOULDBLOCK)\ 169 USE_TTV_ERROR_ID(TTV_EC_SOCKET_ENOTCONN)\ 170 USE_TTV_ERROR_ID(TTV_EC_SOCKET_TRY_AGAIN)\ 171 USE_TTV_ERROR_ID(TTV_EC_SOCKET_CONNECT_FAILED)\ 172 USE_TTV_ERROR_ID(TTV_EC_SOCKET_ECONNABORTED)\ 173 USE_TTV_ERROR_ID(TTV_EC_SOCKET_EALREADY)\ 174 USE_TTV_ERROR_ID(TTV_EC_SOCKET_CREATE_FAILED)\ 175 USE_TTV_ERROR_ID(TTV_EC_SOCKET_GETADDRINFO_FAILED)\ 176 USE_TTV_ERROR_ID(TTV_EC_SOCKET_HOST_NOT_FOUND)\ 177 USE_TTV_ERROR_ID(TTV_EC_SOCKET_RECV_ERROR)\ 178 USE_TTV_ERROR_ID(TTV_EC_SOCKET_SEND_ERROR)\ 179 USE_TTV_ERROR_ID(TTV_EC_SOCKET_IOCTL_ERROR)\ 180 USE_TTV_ERROR_ID(TTV_EC_SOCKET_ETIMEDOUT)\ 181 USE_TTV_ERROR_ID(TTV_EC_SOCKET_ECONNRESET)\ 182 USE_TTV_ERROR_ID(TTV_EC_SOCKET_ERR)\ 184 USE_TTV_ERROR_ID(TTV_EC_PUBSUB_BAD_TOPIC)\ 185 USE_TTV_ERROR_ID(TTV_EC_PUBSUB_BAD_MESSAGE)\ 186 USE_TTV_ERROR_ID(TTV_EC_PUBSUB_SERVER_INTERNAL_ERROR)\ 187 USE_TTV_ERROR_ID(TTV_EC_PUBSUB_RESPONSE_ERROR)\ 189 USE_TTV_ERROR_ID(TTV_EC_PROFILEIMAGE_IMAGE_VALIDATION_FAILED)\ 190 USE_TTV_ERROR_ID(TTV_EC_PROFILEIMAGE_FORMAT_VALIDATION_FAILED)\ 191 USE_TTV_ERROR_ID(TTV_EC_PROFILEIMAGE_SIZE_VALIDATION_FAILED)\ 192 USE_TTV_ERROR_ID(TTV_EC_PROFILEIMAGE_BACKEND_FAILURE)\ 194 USE_TTV_ERROR_ID(TTV_EC_GRAPHQL_ERROR)\ 196 USE_TTV_ERROR_ID(TTV_EC_INVALID_STRUCT_SIZE) \ 197 USE_TTV_ERROR_ID(TTV_EC_REQUEST_ABORTED) \ 198 USE_TTV_ERROR_ID(TTV_EC_STILL_IN_USE) \ 199 END_ERROR_IDS(TTV_EC_END_ERRORS)\ 201 #define USE_TTV_ERROR_ID(ec) ec, 202 #define USE_TTV_WARNING_ID(ec) ec, 203 #define USE_TTV_SUCCESS_ID(ec) ec = 0, 204 #define BEGIN_WARNING_IDS(ec) ec = CONSTRUCT_WARNING_ID_VALUE(TTV_MODULE_ID_TWITCH_CORE, (1 << 12)), 205 #define END_WARNING_IDS(ec) ec, 206 #define BEGIN_ERROR_IDS(ec) ec = CONSTRUCT_ERROR_ID_VALUE(TTV_MODULE_ID_TWITCH_CORE, 1), 207 #define END_ERROR_IDS(ec) ec 218 #undef BEGIN_ERROR_IDS 220 #undef BEGIN_WARNING_IDS 221 #undef END_WARNING_IDS 222 #undef USE_TTV_SUCCESS_ID 223 #undef USE_TTV_WARNING_ID 224 #undef USE_TTV_ERROR_ID 230 #define TTV_SUCCEEDED(ec) ( (ec & kErrorFlagMask) == 0 ) 234 #define TTV_FAILED(ec) ( (ec & kErrorFlagMask) != 0 ) 238 #define ASSERT_ON_ERROR(ec) { assert ( TTV_SUCCEEDED(ec) ); } 239 #define RETURN_CLIENT_ERROR(ec) { return ec; } 240 #define TTV_RETURN_ON_NULL(ptr, ec) { if ( (ptr) == nullptr) RETURN_CLIENT_ERROR(ec); } 241 #define TTV_RETURN_ON_NOT_NULL(ptr, ec) { if ( (ptr) != nullptr) RETURN_CLIENT_ERROR(ec); } 242 #define TTV_RETURN_ON_EMPTY_STRING(str, ec) { if (str == nullptr || str[0] == '\0') RETURN_CLIENT_ERROR(ec); } 243 #define TTV_RETURN_ON_EMPTY_STDSTRING(str, ec) { if (str.size() == 0) RETURN_CLIENT_ERROR(ec); } 244 #define TTV_RETURN_ON_ERROR(err) { if (TTV_FAILED(ec)) RETURN_CLIENT_ERROR(ec); } 245 #define TTV_RETURN_ON_DIFFERENT(a, b, ec) { if ( (a) != (b) ) RETURN_CLIENT_ERROR(ec); } 246 #define TTV_RETURN_ON_SAME(a, b, ec) { if ( (a) == (b) ) RETURN_CLIENT_ERROR(ec); } 272 EnumValue(
const char* name, uint32_t value);
#define TTV_CORE_ERROR_IDS
Definition: errortypes.h:88
void UnregisterErrorToStringFunction(ErrorToStringFunction func)
void GetAllErrorCodes(std::vector< EnumValue > &result)
void RegisterErrorCodeValueFunction(ErrorCodeValueFunction func)
EnumValue(const char *name, uint32_t value)
Definition: errortypes.h:267
uint32_t value
Definition: errortypes.h:270
const char * CoreErrorToString(TTV_ErrorCode ec)
void GetCoreErrorCodeValues(std::vector< EnumValue > &result)
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
const uint32_t kErrorModuleIdMask
Definition: errortypes.h:32
const char * ErrorToString(TTV_ErrorCode ec)
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
const uint32_t TTV_MODULE_ID_TWITCH_CORE
Definition: errortypes.h:19
void RegisterErrorToStringFunction(ErrorToStringFunction func)
TTV_CoreErrorId
Definition: errortypes.h:212
void UnregisterErrorCodeValueFunction(ErrorCodeValueFunction func)
void(* ErrorCodeValueFunction)(std::vector< EnumValue > &result)
Definition: errortypes.h:68
const uint32_t kErrorIdMask
Definition: errortypes.h:33
const char *(* ErrorToStringFunction)(TTV_ErrorCode ec)
Definition: errortypes.h:64
const uint32_t kErrorFlagMask
Definition: errortypes.h:34
std::string name
Definition: errortypes.h:269