1 /*
2     SPDX-FileCopyrightText: 2015-2017 Krzysztof Nowicki <krissn@op.pl>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include <QSharedDataPointer>
10 #include <QXmlStreamWriter>
11 
12 #include "ewstypes.h"
13 
14 class EwsPropertyFieldPrivate;
15 
16 class EwsPropertyField
17 {
18 public:
19     enum Type {
20         Field,
21         ExtendedField,
22         IndexedField,
23         UnknownField,
24     };
25 
26     EwsPropertyField();
27     explicit EwsPropertyField(const QString &uri); // FieldURI
28     EwsPropertyField(const QString &uri, unsigned index); // IndexedFieldURI
29     EwsPropertyField(EwsDistinguishedPropSetId psid, unsigned id, EwsPropertyType type);
30     EwsPropertyField(EwsDistinguishedPropSetId psid, const QString &name, EwsPropertyType type);
31     EwsPropertyField(const QString &psid, unsigned id, EwsPropertyType type);
32     EwsPropertyField(const QString &psid, const QString &name, EwsPropertyType type);
33     EwsPropertyField(unsigned tag, EwsPropertyType type);
34     EwsPropertyField(const EwsPropertyField &other);
35     ~EwsPropertyField();
36 
37     EwsPropertyField &operator=(const EwsPropertyField &other);
38     bool operator==(const EwsPropertyField &other) const;
39 
40     EwsPropertyField(EwsPropertyField &&other);
41     EwsPropertyField &operator=(EwsPropertyField &&other);
42 
43     void write(QXmlStreamWriter &writer) const;
44     bool read(QXmlStreamReader &reader);
45 
46     bool writeWithValue(QXmlStreamWriter &writer, const QVariant &value) const;
47     void writeValue(QXmlStreamWriter &writer, const QVariant &value) const;
48     void writeExtendedValue(QXmlStreamWriter &writer, const QVariant &value) const;
49 
50     Type type() const;
51     QString uri() const;
52 
53 private:
54     QSharedDataPointer<EwsPropertyFieldPrivate> d;
55 
56     friend uint qHash(const EwsPropertyField &prop, uint seed);
57     friend QDebug operator<<(QDebug debug, const EwsPropertyField &prop);
58 };
59 
60 uint qHash(const EwsPropertyField &prop, uint seed);
61 
62 QDebug operator<<(QDebug debug, const EwsPropertyField &prop);
63 
64