diff options
author | Tobias Markmann <tm@ayena.de> | 2014-11-04 17:37:29 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2014-11-04 17:42:55 (GMT) |
commit | a13511f0fc7998ab1350b3549f42c3e2eef04be3 (patch) | |
tree | 9e0f1f16d295c86f01df24aff73bcc87938607a3 /Sluift/ElementConvertors/MAMFinConvertor.cpp | |
parent | a48fd35709f0ae6e9d6a58ad0c7f0ff4bc7e9f8d (diff) | |
download | swift-a13511f0fc7998ab1350b3549f42c3e2eef04be3.zip swift-a13511f0fc7998ab1350b3549f42c3e2eef04be3.tar.bz2 |
Add Sluift element convertor for MAM fin element.
Test-Information:
Yet to be done.
Change-Id: I624a64ae8817695fb1be00f0473ede3915751a21
Diffstat (limited to 'Sluift/ElementConvertors/MAMFinConvertor.cpp')
-rw-r--r-- | Sluift/ElementConvertors/MAMFinConvertor.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Sluift/ElementConvertors/MAMFinConvertor.cpp b/Sluift/ElementConvertors/MAMFinConvertor.cpp new file mode 100644 index 0000000..0df1023 --- /dev/null +++ b/Sluift/ElementConvertors/MAMFinConvertor.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <boost/numeric/conversion/cast.hpp> +#include <boost/smart_ptr/make_shared.hpp> +#include <lua.hpp> +#include <Sluift/ElementConvertors/MAMFinConvertor.h> +#include <Sluift/LuaElementConvertors.h> +#include <Swiften/Elements/Form.h> +#include <Swiften/Elements/ResultSet.h> + +#pragma clang diagnostic ignored "-Wunused-private-field" + +using namespace Swift; + +MAMFinConvertor::MAMFinConvertor(LuaElementConvertors* convertors) : + GenericLuaElementConvertor<MAMFin>("mam_fin"), + convertors(convertors) { +} + +MAMFinConvertor::~MAMFinConvertor() { +} + +boost::shared_ptr<MAMFin> MAMFinConvertor::doConvertFromLua(lua_State* L) { + boost::shared_ptr<MAMFin> result = boost::make_shared<MAMFin>(); + lua_getfield(L, -1, "query_id"); + if (lua_isstring(L, -1)) { + result->setQueryID(std::string(lua_tostring(L, -1))); + } + lua_pop(L, 1); + lua_getfield(L, -1, "complete"); + if (lua_isboolean(L, -1)) { + result->setComplete(lua_toboolean(L, -1) != 0); + } + lua_pop(L, 1); + lua_getfield(L, -1, "stable"); + if (!lua_isnil(L, -1)) { + result->setStable(lua_toboolean(L, -1) != 0); + } + lua_pop(L, 1); + lua_getfield(L, -1, "result_set"); + if (!lua_isnil(L, -1)) { + boost::shared_ptr<ResultSet> resultSet = boost::dynamic_pointer_cast<ResultSet>(convertors->convertFromLuaUntyped(L, -1, "result_set")); + if (!!resultSet) { + result->setResultSet(resultSet); + } + } + lua_pop(L, 1); + return result; +} + +void MAMFinConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<MAMFin> payload) { + lua_createtable(L, 0, 0); + if (payload->getQueryID()) { + lua_pushstring(L, (*payload->getQueryID()).c_str()); + lua_setfield(L, -2, "query_id"); + } + lua_pushboolean(L, payload->isComplete()); + lua_setfield(L, -2, "complete"); + lua_pushboolean(L, payload->isStable()); + lua_setfield(L, -2, "stable"); + if (convertors->convertToLuaUntyped(L, payload->getResultSet()) > 0) { + lua_setfield(L, -2, "result_set"); + } +} + +boost::optional<LuaElementConvertor::Documentation> MAMFinConvertor::getDocumentation() const { + return Documentation( + "MAMFin", + "This table has the following fields:\n\n" + "- `query_id`: string (Optional)\n" + "- `complete`: string (Optional)\n" + "- `stable`: string @{Form} (Optional)\n" + "- `result_set`: @{ResultSet} (Optional)\n" + ); +} |