File indexing completed on 2024-05-12 05:22:27

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Daniel Vrátil <dvratil@kde.org>
0003  * SPDX-FileCopyrightText: 2022 Claudio Cambra <claudio.cambra@kde.org>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only
0006  * SPDX-License-Identifier: LGPL-3.0-only
0007  * SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL
0008  */
0009 
0010 #pragma once
0011 
0012 #include <QSharedDataPointer>
0013 #include "kgapipeople_export.h"
0014 
0015 #include <optional>
0016 
0017 class QJsonObject;
0018 class QJsonValue;
0019 class QJsonArray;
0020 
0021 namespace KGAPI2::People
0022 {
0023 class ContactGroupMembership;
0024 class DomainMembership;
0025 class FieldMetadata;
0026 struct MembershipDefinition;
0027 
0028 /**
0029  * A person's membership in a group. Only contact group memberships can be
0030  * modified.
0031  *
0032  * @see https://developers.google.com/people/api/rest/v1/people#membership
0033  * @since 5.23.0
0034  **/
0035 class KGAPIPEOPLE_EXPORT Membership
0036 {
0037 public:
0038     /** Constructs a new Membership **/
0039     explicit Membership();
0040     Membership(const MembershipDefinition &definition);
0041     Membership(const Membership &);
0042     Membership(Membership &&) noexcept;
0043     Membership &operator=(const Membership &);
0044     Membership &operator=(Membership &&) noexcept;
0045     /** Destructor. **/
0046     ~Membership();
0047 
0048     bool operator==(const Membership &) const;
0049     bool operator!=(const Membership &) const;
0050 
0051     [[nodiscard]] static Membership fromJSON(const QJsonObject &obj);
0052     [[nodiscard]] static QList<Membership> fromJSONArray(const QJsonArray &data);
0053     [[nodiscard]] QJsonValue toJSON() const;
0054 
0055     /** Output only. The domain membership. **/
0056     [[nodiscard]] DomainMembership domainMembership() const;
0057 
0058     /** The contact group membership. **/
0059     [[nodiscard]] ContactGroupMembership contactGroupMembership() const;
0060     /** Sets value of the contactGroupMembership property. **/
0061     void setContactGroupMembership(const ContactGroupMembership &value);
0062 
0063     /** Metadata about the membership. **/
0064     [[nodiscard]] FieldMetadata metadata() const;
0065     /** Sets value of the metadata property. **/
0066     void setMetadata(const FieldMetadata &value);
0067 
0068 private:
0069     class Private;
0070     QSharedDataPointer<Private> d;
0071 }; // Membership
0072 
0073 } // namespace KGAPI2::People