diff --git a/include/Swiften/Serializer/PayloadSerializers/PubSubPublishPayloadSerializer.cpp b/include/Swiften/Serializer/PayloadSerializers/PubSubPublishPayloadSerializer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..09cfbb5fbdc6de6a57c09f43a403b38f8aa5b953 --- /dev/null +++ b/include/Swiften/Serializer/PayloadSerializers/PubSubPublishPayloadSerializer.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2011 Jan Kaluza + * Licensed under the Simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +#include +#include +#include +#include +#include +#include + +namespace Swift { + +PubSubPublishPayloadSerializer::PubSubPublishPayloadSerializer(PayloadSerializerCollection *serializers) + : GenericPayloadSerializer(), + serializers(serializers) { +} + +std::string PubSubPublishPayloadSerializer::serializePayload(boost::shared_ptr payload) const { + XMLElement publish("publish"); + + if (!payload->getNode().empty()) { + publish.setAttribute("node", payload->getNode()); + } + + if (!payload->getItems().empty()) { + foreach(boost::shared_ptr subPayload, payload->getItems()) { + PayloadSerializer* serializer = serializers->getPayloadSerializer(subPayload); + if (serializer) { + publish.addNode(boost::shared_ptr(new XMLRawTextNode(serializer->serialize(subPayload)))); + } + } + } + + return publish.serialize(); +} + +}