* Author : Maxim Mamontov <faust@stargazer.dp.ua>
*/
-#include "stg/parser_get_users.h"
+#include "parser_get_users.h"
-PARSER_GET_USERS::PARSER_GET_USERS()
- : callabck(NULL),
+#include <cstddef>
+
+#include <strings.h>
+
+using namespace STG;
+
+GET_USERS::PARSER::PARSER()
+ : callback(NULL),
data(NULL),
- depth(0)
+ depth(0),
+ parsingAnswer(false)
{
- userParser.SetCallback(&PARSER_GET_USERS::UserCallback, this);
+ userParser.SetCallback(&GET_USERS::PARSER::UserCallback, this);
}
//-----------------------------------------------------------------------------
-int PARSER_GET_USERS::ParseStart(const char * el, const char ** attr)
+int GET_USERS::PARSER::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)
+void GET_USERS::PARSER::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 GET_USERS::PARSER::AddUser(const GET_USER::INFO & userInfo)
{
info.push_back(userInfo);
}
//-----------------------------------------------------------------------------
-void PARSER_GET_USERS::SetCallback(CALLBACK f, void * d)
+void GET_USERS::PARSER::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 GET_USERS::PARSER::UserCallback(bool result, const std::string & error, const GET_USER::INFO & info, void * data)
{
- PARSER_GET_USERS * parser = static_cast<PARSER_GET_USERS *>(data);
- parser->AddUser(info);
+ GET_USERS::PARSER * parser = static_cast<GET_USERS::PARSER *>(data);
+ if (!result)
+ parser->SetError(error);
+ else
+ parser->AddUser(info);
}