1*a62be085SSadaf Ebrahimi #ifndef DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_DESERIALIZER_H_ // NOLINT 2*a62be085SSadaf Ebrahimi #define DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_DESERIALIZER_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/integral_types.h" 9*a62be085SSadaf Ebrahimi #include "base/port.h" 10*a62be085SSadaf Ebrahimi 11*a62be085SSadaf Ebrahimi namespace dynamic_depth { 12*a62be085SSadaf Ebrahimi namespace xmpmeta { 13*a62be085SSadaf Ebrahimi namespace xml { 14*a62be085SSadaf Ebrahimi 15*a62be085SSadaf Ebrahimi // Performs deserialization. 16*a62be085SSadaf Ebrahimi // Example: 17*a62be085SSadaf Ebrahimi // Deserializer deserializer(); 18*a62be085SSadaf Ebrahimi // string revision; 19*a62be085SSadaf Ebrahimi // deserializer.ParseString("Revision", &revision); 20*a62be085SSadaf Ebrahimi class Deserializer { 21*a62be085SSadaf Ebrahimi public: ~Deserializer()22*a62be085SSadaf Ebrahimi virtual ~Deserializer() {} 23*a62be085SSadaf Ebrahimi 24*a62be085SSadaf Ebrahimi // Returns a Deserializer. 25*a62be085SSadaf Ebrahimi // child_name is the name of the next node to deserialize. 26*a62be085SSadaf Ebrahimi virtual std::unique_ptr<Deserializer> CreateDeserializer( 27*a62be085SSadaf Ebrahimi const string& prefix, const string& child_name) const = 0; 28*a62be085SSadaf Ebrahimi 29*a62be085SSadaf Ebrahimi // Returns a Deserializer from a list element node. 30*a62be085SSadaf Ebrahimi virtual std::unique_ptr<Deserializer> CreateDeserializerFromListElementAt( 31*a62be085SSadaf Ebrahimi const string& prefix, const string& list_name, int index) const = 0; 32*a62be085SSadaf Ebrahimi 33*a62be085SSadaf Ebrahimi // Parsers for properties with the given prefix. 34*a62be085SSadaf Ebrahimi // Parses a node such as <NodeName Prefix:Name="Value" /> 35*a62be085SSadaf Ebrahimi virtual bool ParseBase64(const string& prefix, const string& name, 36*a62be085SSadaf Ebrahimi string* value) const = 0; 37*a62be085SSadaf Ebrahimi virtual bool ParseIntArrayBase64(const string& prefix, const string& name, 38*a62be085SSadaf Ebrahimi std::vector<int>* values) const = 0; 39*a62be085SSadaf Ebrahimi virtual bool ParseFloatArrayBase64(const string& prefix, const string& name, 40*a62be085SSadaf Ebrahimi std::vector<float>* values) const = 0; 41*a62be085SSadaf Ebrahimi virtual bool ParseDoubleArrayBase64(const string& prefix, const string& name, 42*a62be085SSadaf Ebrahimi std::vector<double>* values) const = 0; 43*a62be085SSadaf Ebrahimi virtual bool ParseBoolean(const string& prefix, const string& name, 44*a62be085SSadaf Ebrahimi bool* value) const = 0; 45*a62be085SSadaf Ebrahimi virtual bool ParseInt(const string& prefix, const string& name, 46*a62be085SSadaf Ebrahimi int* value) const = 0; 47*a62be085SSadaf Ebrahimi virtual bool ParseFloat(const string& prefix, const string& name, 48*a62be085SSadaf Ebrahimi float* value) const = 0; 49*a62be085SSadaf Ebrahimi virtual bool ParseDouble(const string& prefix, const string& name, 50*a62be085SSadaf Ebrahimi double* value) const = 0; 51*a62be085SSadaf Ebrahimi virtual bool ParseLong(const string& prefix, const string& name, 52*a62be085SSadaf Ebrahimi int64* value) const = 0; 53*a62be085SSadaf Ebrahimi virtual bool ParseString(const string& prefix, const string& name, 54*a62be085SSadaf Ebrahimi string* value) const = 0; 55*a62be085SSadaf Ebrahimi 56*a62be085SSadaf Ebrahimi // Parsers for arrays. 57*a62be085SSadaf Ebrahimi virtual bool ParseIntArray(const string& prefix, const string& list_name, 58*a62be085SSadaf Ebrahimi std::vector<int>* values) const = 0; 59*a62be085SSadaf Ebrahimi virtual bool ParseDoubleArray(const string& prefix, const string& list_name, 60*a62be085SSadaf Ebrahimi std::vector<double>* values) const = 0; 61*a62be085SSadaf Ebrahimi }; 62*a62be085SSadaf Ebrahimi 63*a62be085SSadaf Ebrahimi } // namespace xml 64*a62be085SSadaf Ebrahimi } // namespace xmpmeta 65*a62be085SSadaf Ebrahimi } // namespace dynamic_depth 66*a62be085SSadaf Ebrahimi 67*a62be085SSadaf Ebrahimi #endif // DYNAMIC_DEPTH_INTERNAL_XMPMETA_XML_DESERIALIZER_H_ // NOLINT 68