#ifndef XNA_PIPELINE_SERIALIZERS_HPP #define XNA_PIPELINE_SERIALIZERS_HPP #include "serialization.hpp" #include "csharp/exception.hpp" #include #include #include #include namespace xna { class XmlListReader { public: XmlListReader(std::shared_ptr const& reader) : reader(reader) { if (this->reader == nullptr) throw csharp::InvalidOperationException(); //this.enumerator = ((IEnumerable) reader.Xml.ReadContentAsString().Split(XmlListReader.listSeparators, StringSplitOptions.RemoveEmptyEntries)).GetEnumerator(); } constexpr bool AtEnd() const { return atEnd; } private: std::shared_ptr reader; std::vector enumerator; bool atEnd{ false }; }; struct IXmlListItemSerializer { virtual std::any Deserialize(XmlListReader const& list) = 0; }; template class XmlListItemSerializer : public ContentTypeSerializer_T, public IXmlListItemSerializer { public: XmlListItemSerializer(){} XmlListItemSerializer(std::string const& xmlTypeName) : ContentTypeSerializer_T(xmlTypeName) {} virtual T Deserialize(XmlListReader& input) = 0; T Deserialize(IntermediateReader& input, ContentSerializerAttribute& format, T& existingInstance) override { } }; } #endif