1*a62be085SSadaf Ebrahimi #ifndef DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_SERIALIZER_H_ // NOLINT 2*a62be085SSadaf Ebrahimi #define DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_SERIALIZER_H_ // NOLINT 3*a62be085SSadaf Ebrahimi 4*a62be085SSadaf Ebrahimi #include <memory> 5*a62be085SSadaf Ebrahimi #include <string> 6*a62be085SSadaf Ebrahimi #include <vector> 7*a62be085SSadaf Ebrahimi 8*a62be085SSadaf Ebrahimi #include "base/port.h" 9*a62be085SSadaf Ebrahimi 10*a62be085SSadaf Ebrahimi namespace dynamic_depth { 11*a62be085SSadaf Ebrahimi namespace xmpmeta { 12*a62be085SSadaf Ebrahimi namespace xml { 13*a62be085SSadaf Ebrahimi 14*a62be085SSadaf Ebrahimi // Serializes properties for a hierarchy of objects. 15*a62be085SSadaf Ebrahimi // Example: 16*a62be085SSadaf Ebrahimi // BookSerializer serializer(); 17*a62be085SSadaf Ebrahimi // // Serialize a list of objects. 18*a62be085SSadaf Ebrahimi // std::unique_ptr<Serializer> book_list_serializer = 19*a62be085SSadaf Ebrahimi // serializer->CreateListSerializer("Books"); 20*a62be085SSadaf Ebrahimi // for (Book *book : book_list) { 21*a62be085SSadaf Ebrahimi // std::unique_ptr<Serializer> book_serializer = 22*a62be085SSadaf Ebrahimi // cameras_serializer->CreateItemSerializer("Book"); 23*a62be085SSadaf Ebrahimi // success &= book->Serialize(book_serializer.get()); 24*a62be085SSadaf Ebrahimi // 25*a62be085SSadaf Ebrahimi // // Write properties in an object. 26*a62be085SSadaf Ebrahimi // // This would be called from the Book class. 27*a62be085SSadaf Ebrahimi // string book_name("Book"); 28*a62be085SSadaf Ebrahimi // std::unique_ptr<Serializer> book_info_serializer = 29*a62be085SSadaf Ebrahimi // book_serializer->CreateSerializer("Info"); 30*a62be085SSadaf Ebrahimi // book_info_serializer->WriteProperty("Author", "Cereal Eyser"); 31*a62be085SSadaf Ebrahimi // book_info_serializer->WriteProperty("ISBN", "314159265359"); 32*a62be085SSadaf Ebrahimi // std::unique_ptr<Serializer> genre_serializer = 33*a62be085SSadaf Ebrahimi // book_serializer->CreateSeralizer("Genre", true); 34*a62be085SSadaf Ebrahimi // std::unique_ptr<Serializer> fantasy_serializer = 35*a62be085SSadaf Ebrahimi // genre_serializer->CreateSerialzer("Fantasy"); 36*a62be085SSadaf Ebrahimi // // Serialize genre properties here. 37*a62be085SSadaf Ebrahimi // } 38*a62be085SSadaf Ebrahimi 39*a62be085SSadaf Ebrahimi class Serializer { 40*a62be085SSadaf Ebrahimi public: ~Serializer()41*a62be085SSadaf Ebrahimi virtual ~Serializer() {} 42*a62be085SSadaf Ebrahimi 43*a62be085SSadaf Ebrahimi // Returns a Serializer for an object that is an item in a list. 44*a62be085SSadaf Ebrahimi virtual std::unique_ptr<Serializer> CreateItemSerializer( 45*a62be085SSadaf Ebrahimi const string& prefix, const string& item_name) const = 0; 46*a62be085SSadaf Ebrahimi 47*a62be085SSadaf Ebrahimi // Returns a Serializer for a list of objects. 48*a62be085SSadaf Ebrahimi virtual std::unique_ptr<Serializer> CreateListSerializer( 49*a62be085SSadaf Ebrahimi const string& prefix, const string& list_name) const = 0; 50*a62be085SSadaf Ebrahimi 51*a62be085SSadaf Ebrahimi // Creates a serializer from the current serializer. 52*a62be085SSadaf Ebrahimi // node_ns_name is the XML namespace to which the newly created node belongs. 53*a62be085SSadaf Ebrahimi // If this parameter is an empty string, the new node will not belong to a 54*a62be085SSadaf Ebrahimi // namespace. 55*a62be085SSadaf Ebrahimi // node_name is the name of the new node. This parameter cannot be an empty 56*a62be085SSadaf Ebrahimi // string. 57*a62be085SSadaf Ebrahimi virtual std::unique_ptr<Serializer> CreateSerializer( 58*a62be085SSadaf Ebrahimi const string& node_ns_name, const string& node_name) const = 0; 59*a62be085SSadaf Ebrahimi 60*a62be085SSadaf Ebrahimi // Serializes a property with the given prefix. 61*a62be085SSadaf Ebrahimi // Example: <NodeName PropertyPrefix:PropertyName="PropertyValue" /> 62*a62be085SSadaf Ebrahimi virtual bool WriteBoolProperty(const string& prefix, const string& name, 63*a62be085SSadaf Ebrahimi bool value) const = 0; 64*a62be085SSadaf Ebrahimi virtual bool WriteProperty(const string& prefix, const string& name, 65*a62be085SSadaf Ebrahimi const string& value) const = 0; 66*a62be085SSadaf Ebrahimi 67*a62be085SSadaf Ebrahimi // Serializes the collection of values. 68*a62be085SSadaf Ebrahimi virtual bool WriteIntArray(const string& prefix, const string& array_name, 69*a62be085SSadaf Ebrahimi const std::vector<int>& values) const = 0; 70*a62be085SSadaf Ebrahimi virtual bool WriteDoubleArray(const string& prefix, const string& array_name, 71*a62be085SSadaf Ebrahimi const std::vector<double>& values) const = 0; 72*a62be085SSadaf Ebrahimi }; 73*a62be085SSadaf Ebrahimi 74*a62be085SSadaf Ebrahimi } // namespace xml 75*a62be085SSadaf Ebrahimi } // namespace xmpmeta 76*a62be085SSadaf Ebrahimi } // namespace dynamic_depth 77*a62be085SSadaf Ebrahimi 78*a62be085SSadaf Ebrahimi #endif // DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_SERIALIZER_H_ // NOLINT 79