/* * Copyright (c) 2014-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include #include #include #include #include #include #include #include #include using namespace Swift; ForwardedConvertor::ForwardedConvertor(LuaElementConvertors* convertors) : GenericLuaElementConvertor("forwarded"), convertors(convertors) { } ForwardedConvertor::~ForwardedConvertor() { } std::shared_ptr ForwardedConvertor::doConvertFromLua(lua_State* L) { std::shared_ptr result = std::make_shared(); lua_getfield(L, -1, "delay"); if (!lua_isnil(L, -1)) { std::shared_ptr delay = std::dynamic_pointer_cast(convertors->convertFromLuaUntyped(L, -1, "delay")); if (!!delay) { result->setDelay(delay); } } lua_pop(L, 1); lua_getfield(L, -1, "stanza"); if (!lua_isnil(L, -1)) { std::shared_ptr stanza = std::dynamic_pointer_cast(convertors->convertFromLua(L, -1)); if (!!stanza) { result->setStanza(stanza); } lua_pop(L, 1); return result; } return result; } void ForwardedConvertor::doConvertToLua(lua_State* L, std::shared_ptr payload) { lua_createtable(L, 0, 0); if (convertors->convertToLuaUntyped(L, payload->getDelay()) > 0) { lua_setfield(L, -2, "delay"); } std::shared_ptr stanza = payload->getStanza(); if (!!stanza) { if (convertors->convertToLua(L, stanza) > 0) { lua_setfield(L, -2, "stanza"); } } } boost::optional ForwardedConvertor::getDocumentation() const { return Documentation( "Forwarded", "This table has the following fields:\n\n" "- `delay`: @{Delay} (Optional)\n" "- `stanza`: @{Stanza} (Optional)\n" ); }