#include "stg/parser_get_users.h"
+#include <cstddef>
+
+#include <strings.h>
+
PARSER_GET_USERS::PARSER_GET_USERS()
- : callabck(NULL),
+ : callback(NULL),
data(NULL),
- depth(0)
+ depth(0),
+ parsingAnswer(false)
{
userParser.SetCallback(&PARSER_GET_USERS::UserCallback, this);
}
int PARSER_GET_USERS::ParseStart(const char * el, const char ** attr)
{
depth++;
-if (depth == 1)
- ParseUsers(el, attr);
+if (depth == 1 && strcasecmp(el, "users") == 0)
+ parsingAnswer = true;
-if (depth > 1)
+if (depth > 1 && parsingAnswer)
userParser.ParseStart(el, attr);
return 0;
void PARSER_GET_USERS::ParseEnd(const char * el)
{
depth--;
-if (depth > 0)
+if (depth > 0 && parsingAnswer)
userParser.ParseEnd(el);
-if (depth == 0)
+if (depth == 0 && parsingAnswer)
+ {
if (callback)
- callback(&info, data);
-}
-//-----------------------------------------------------------------------------
-void PARSER_GET_USERS::ParseUsers(const char * el, const char ** /*attr*/)
-{
-if (strcasecmp(el, "users") == 0)
+ callback(error.empty(), error, info, data);
+ error.clear();
info.clear();
+ parsingAnswer = false;
+ }
}
//-----------------------------------------------------------------------------
void PARSER_GET_USERS::AddUser(const PARSER_GET_USER::INFO & userInfo)
void PARSER_GET_USERS::SetCallback(CALLBACK f, void * d)
{
callback = f;
-data = data;
+data = d;
}
//-----------------------------------------------------------------------------
-void PARSER_GET_USERS::UserCallback(const PARSER_GET_USER::INFO & info, void * data)
+void PARSER_GET_USERS::UserCallback(bool result, const std::string & error, const PARSER_GET_USER::INFO & info, void * data)
{
PARSER_GET_USERS * parser = static_cast<PARSER_GET_USERS *>(data);
- parser->AddUser(info);
+ if (!result)
+ parser->SetError(error);
+ else
+ parser->AddUser(info);
}