xref: /aosp_15_r20/external/dynamic_depth/internal/xmpmeta/xml/deserializer.h (revision a62be0856e8e1158f43b03e41bbad10f4d005fde)
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