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