Refactoring of error processing in Local experts API.

This commit is contained in:
Daria Volvenkova 2017-09-25 17:46:02 +03:00 committed by Roman Kuznetsov
parent ab78207f61
commit 009c3ec70b
2 changed files with 13 additions and 32 deletions

View file

@ -25,15 +25,13 @@ bool CheckJsonArray(json_t const * data)
return json_is_array(data) && json_array_size(data) > 0;
}
void ParseError(std::string const & src, ErrorCode & errorCode, std::string & message)
void ParseError(std::string const & src, int & errorCode, std::string & message)
{
message.clear();
errorCode = 0;
my::Json root(src.c_str());
int code = 0;
FromJSONObject(root.get(), "code", code);
FromJSONObject(root.get(), "code", errorCode);
FromJSONObject(root.get(), "message", message);
// TODO(darina): Process real error codes.
errorCode = code > 0 ? ErrorCode::NoLocals : ErrorCode::RemoteError;
}
void ParseLocals(std::string const & src, std::vector<LocalExpert> & locals,
@ -86,10 +84,11 @@ bool RawApi::Get(double lat, double lon, std::string const & lang, size_t result
platform::HttpClient request(ostream.str());
request.SetHttpMethod("GET");
if (request.RunHttpRequest() && request.ErrorCode() == 200)
if (request.RunHttpRequest())
{
result = request.ServerResponse();
return true;
if (request.ErrorCode() == 200)
return true;
}
return false;
}
@ -113,7 +112,7 @@ uint64_t Api::GetLocals(double lat, double lon, std::string const & lang,
{
try
{
ErrorCode errorCode;
int errorCode;
std::string errorMessage;
ParseError(result, errorCode, errorMessage);
LOG(LWARNING, ("Locals request failed:", errorCode, errorMessage));
@ -121,8 +120,8 @@ uint64_t Api::GetLocals(double lat, double lon, std::string const & lang,
}
catch (my::Json::Exception const & e)
{
LOG(LWARNING, ("Unknown error:", e.Msg()));
return errorFn(id, ErrorCode::UnknownError, "Unknown error: " + e.Msg());
LOG(LWARNING, ("Unknown error:", e.Msg(), ", response:", result));
return errorFn(id, kUnknownErrorCode, "Unknown error: " + e.Msg());
}
}
@ -135,8 +134,8 @@ uint64_t Api::GetLocals(double lat, double lon, std::string const & lang,
}
catch (my::Json::Exception const & e)
{
LOG(LWARNING, ("Locals response parsing failed:", e.Msg()));
errorFn(id, ErrorCode::UnknownError, "Response parsing failed: " + e.Msg());
LOG(LWARNING, ("Locals response parsing failed:", e.Msg(), ", response:", result));
errorFn(id, kUnknownErrorCode, "Response parsing failed: " + e.Msg());
}
successFn(id, locals, pageNumber, resultsOnPage, hasPreviousPage, hasNextPage);
@ -144,17 +143,6 @@ uint64_t Api::GetLocals(double lat, double lon, std::string const & lang,
return id;
}
std::string DebugPrint(ErrorCode code)
{
switch (code)
{
case ErrorCode::NoLocals: return "NoLocals";
case ErrorCode::RemoteError: return "RemoteError";
case ErrorCode::UnknownError: return "UnknownError";
}
return "Unknown error code";
}
std::string DebugPrint(LocalExpert const & localExpert)
{
std::ostringstream out;

View file

@ -16,13 +16,6 @@ public:
size_t resultsOnPage, size_t pageNumber, std::string & result);
};
enum class ErrorCode
{
NoLocals,
RemoteError,
UnknownError
};
struct LocalExpert
{
size_t m_id;
@ -43,12 +36,13 @@ struct LocalExpert
using LocalsSuccessCallback = platform::SafeCallback<void(uint64_t id, std::vector<LocalExpert> const & locals,
size_t pageNumber, size_t countPerPage,
bool hasPreviousPage, bool hasNextPage)>;
using LocalsErrorCallback = platform::SafeCallback<void(uint64_t id, ErrorCode errorCode,
using LocalsErrorCallback = platform::SafeCallback<void(uint64_t id, int errorCode,
std::string const & errorMessage)>;
class Api
{
public:
static int constexpr kUnknownErrorCode = 0;
static std::string GetLocalsPageUrl();
uint64_t GetLocals(double lat, double lon, std::string const & lang,
size_t resultsOnPage, size_t pageNumber,
@ -59,6 +53,5 @@ private:
uint64_t m_requestId = 0;
};
std::string DebugPrint(ErrorCode code);
std::string DebugPrint(LocalExpert const & localExpert);
} // namespace locals