54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
|
#ifndef CPR_ERROR_H
|
||
|
#define CPR_ERROR_H
|
||
|
|
||
|
#include <cstdint>
|
||
|
#include <string>
|
||
|
|
||
|
#include "cpr/cprtypes.h"
|
||
|
#include <utility>
|
||
|
|
||
|
namespace cpr {
|
||
|
|
||
|
enum class ErrorCode {
|
||
|
OK = 0,
|
||
|
CONNECTION_FAILURE,
|
||
|
EMPTY_RESPONSE,
|
||
|
HOST_RESOLUTION_FAILURE,
|
||
|
INTERNAL_ERROR,
|
||
|
INVALID_URL_FORMAT,
|
||
|
NETWORK_RECEIVE_ERROR,
|
||
|
NETWORK_SEND_FAILURE,
|
||
|
OPERATION_TIMEDOUT,
|
||
|
PROXY_RESOLUTION_FAILURE,
|
||
|
SSL_CONNECT_ERROR,
|
||
|
SSL_LOCAL_CERTIFICATE_ERROR,
|
||
|
SSL_REMOTE_CERTIFICATE_ERROR,
|
||
|
SSL_CACERT_ERROR,
|
||
|
GENERIC_SSL_ERROR,
|
||
|
UNSUPPORTED_PROTOCOL,
|
||
|
REQUEST_CANCELLED,
|
||
|
TOO_MANY_REDIRECTS,
|
||
|
UNKNOWN_ERROR = 1000,
|
||
|
};
|
||
|
|
||
|
class Error {
|
||
|
public:
|
||
|
ErrorCode code = ErrorCode::OK;
|
||
|
std::string message{};
|
||
|
|
||
|
Error() = default;
|
||
|
|
||
|
Error(const std::int32_t& curl_code, std::string&& p_error_message) : code{getErrorCodeForCurlError(curl_code)}, message(std::move(p_error_message)) {}
|
||
|
|
||
|
explicit operator bool() const {
|
||
|
return code != ErrorCode::OK;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
static ErrorCode getErrorCodeForCurlError(std::int32_t curl_code);
|
||
|
};
|
||
|
|
||
|
} // namespace cpr
|
||
|
|
||
|
#endif
|