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

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 #include "gender.h"
0011 
0012 #include "fieldmetadata.h"
0013 #include "peopleservice.h"
0014 
0015 #include <QJsonArray>
0016 #include <QJsonObject>
0017 #include <QJsonValue>
0018 #include <QSharedData>
0019 
0020 #include <algorithm>
0021 
0022 namespace KGAPI2::People
0023 {
0024 class Gender::Private : public QSharedData
0025 {
0026 public:
0027     explicit Private() = default;
0028     Private(const Private &) = default;
0029     Private(Private &&) noexcept = delete;
0030     Private &operator=(const Private &) = delete;
0031     Private &operator=(Private &&) noexcept = delete;
0032     ~Private() = default;
0033 
0034     bool operator==(const Private &other) const
0035     {
0036         return metadata == other.metadata && formattedValue == other.formattedValue && value == other.value && addressMeAs == other.addressMeAs;
0037     }
0038 
0039     bool operator!=(const Private &other) const
0040     {
0041         return !(*this == other);
0042     }
0043 
0044     FieldMetadata metadata{};
0045     QString formattedValue{};
0046     QString value{};
0047     QString addressMeAs{};
0048 };
0049 
0050 Gender::Gender()
0051     : d(new Private)
0052 {
0053 }
0054 
0055 Gender::Gender(const Gender &) = default;
0056 Gender::Gender(Gender &&) noexcept = default;
0057 Gender &Gender::operator=(const Gender &) = default;
0058 Gender &Gender::operator=(Gender &&) noexcept = default;
0059 Gender::~Gender() = default;
0060 
0061 bool Gender::operator==(const Gender &other) const
0062 {
0063     return *d == *other.d;
0064 }
0065 
0066 bool Gender::operator!=(const Gender &other) const
0067 {
0068     return !(*this == other);
0069 }
0070 
0071 FieldMetadata Gender::metadata() const
0072 {
0073     return d->metadata;
0074 }
0075 
0076 void Gender::setMetadata(const FieldMetadata &value)
0077 {
0078     d->metadata = value;
0079 }
0080 QString Gender::formattedValue() const
0081 {
0082     return d->formattedValue;
0083 }
0084 QString Gender::value() const
0085 {
0086     return d->value;
0087 }
0088 
0089 void Gender::setValue(const QString &value)
0090 {
0091     d->value = value;
0092 }
0093 QString Gender::addressMeAs() const
0094 {
0095     return d->addressMeAs;
0096 }
0097 
0098 void Gender::setAddressMeAs(const QString &value)
0099 {
0100     d->addressMeAs = value;
0101 }
0102 
0103 Gender Gender::fromJSON(const QJsonObject &obj)
0104 {
0105     Gender gender;
0106 
0107     if(!obj.isEmpty()) {
0108         const auto metadata = obj.value(QStringLiteral("metadata")).toObject();
0109         gender.d->metadata = FieldMetadata::fromJSON(metadata);
0110         gender.d->value = obj.value(QStringLiteral("value")).toString();
0111         gender.d->formattedValue = obj.value(QStringLiteral("formattedValue")).toString();
0112         gender.d->addressMeAs = obj.value(QStringLiteral("addressMeAs")).toString();
0113     }
0114 
0115     return gender;
0116 }
0117 
0118 QList<Gender> Gender::fromJSONArray(const QJsonArray &data)
0119 {
0120     QList<Gender> genders;
0121 
0122     for(const auto &gender : data) {
0123         if(gender.isObject()) {
0124             const auto objectifiedGender = gender.toObject();
0125             genders.append(fromJSON(objectifiedGender));
0126         }
0127     }
0128 
0129     return genders;
0130 }
0131 
0132 QJsonValue Gender::toJSON() const
0133 {
0134     QJsonObject obj;
0135 
0136     // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata"}, d->metadata.toJSON());
0137     // Output only -> PeopleUtils::addValueToJsonObjectIfValid(obj, "formattedValue", d->formattedValue);
0138     PeopleUtils::addValueToJsonObjectIfValid(obj, "value", d->value);
0139     PeopleUtils::addValueToJsonObjectIfValid(obj, "addressMeAs", d->addressMeAs);
0140     return obj;
0141 }
0142 
0143 } // namespace KGAPI2::People