From a13511f0fc7998ab1350b3549f42c3e2eef04be3 Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Tue, 4 Nov 2014 17:37:29 +0000 Subject: Add Sluift element convertor for MAM fin element. Test-Information: Yet to be done. Change-Id: I624a64ae8817695fb1be00f0473ede3915751a21 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 +#include +#include +#include +#include +#include +#include + +#pragma clang diagnostic ignored "-Wunused-private-field" + +using namespace Swift; + +MAMFinConvertor::MAMFinConvertor(LuaElementConvertors* convertors) : + GenericLuaElementConvertor("mam_fin"), + convertors(convertors) { +} + +MAMFinConvertor::~MAMFinConvertor() { +} + +boost::shared_ptr MAMFinConvertor::doConvertFromLua(lua_State* L) { + boost::shared_ptr result = boost::make_shared(); + 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 = boost::dynamic_pointer_cast(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 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 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" + ); +} diff --git a/Sluift/ElementConvertors/MAMFinConvertor.h b/Sluift/ElementConvertors/MAMFinConvertor.h new file mode 100644 index 0000000..2aabd05 --- /dev/null +++ b/Sluift/ElementConvertors/MAMFinConvertor.h @@ -0,0 +1,29 @@ +/* + * 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. + */ + +#pragma once + +#include +#include +#include + +namespace Swift { + class LuaElementConvertors; + + class MAMFinConvertor : public GenericLuaElementConvertor { + public: + MAMFinConvertor(LuaElementConvertors* convertors); + virtual ~MAMFinConvertor(); + + virtual boost::shared_ptr doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE; + virtual void doConvertToLua(lua_State*, boost::shared_ptr) SWIFTEN_OVERRIDE; + virtual boost::optional getDocumentation() const SWIFTEN_OVERRIDE; + + private: + LuaElementConvertors* convertors; + }; +} + diff --git a/Sluift/ElementConvertors/SConscript b/Sluift/ElementConvertors/SConscript index 33d40ab..265017b 100644 --- a/Sluift/ElementConvertors/SConscript +++ b/Sluift/ElementConvertors/SConscript @@ -47,6 +47,7 @@ convertors = [ env.File("ForwardedConvertor.cpp"), env.File("MAMResultConvertor.cpp"), env.File("MAMQueryConvertor.cpp"), + env.File("MAMFinConvertor.cpp"), env.File("SubjectConvertor.cpp"), env.File("IsodeIQDelegationConvertor.cpp") ] diff --git a/Sluift/LuaElementConvertors.cpp b/Sluift/LuaElementConvertors.cpp index d2af664..d6f603b 100644 --- a/Sluift/LuaElementConvertors.cpp +++ b/Sluift/LuaElementConvertors.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -60,6 +61,7 @@ LuaElementConvertors::LuaElementConvertors() { convertors.push_back(boost::make_shared(this)); convertors.push_back(boost::make_shared(this)); convertors.push_back(boost::make_shared(this)); + convertors.push_back(boost::make_shared(this)); convertors.push_back(boost::make_shared()); convertors.push_back(boost::make_shared()); convertors.push_back(boost::make_shared()); -- cgit v0.10.2-6-g49f6