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 "externalid.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 ExternalId::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 type == other.type && formattedType == other.formattedType && value == other.value && metadata == other.metadata; 0037 } 0038 0039 bool operator!=(const Private &other) const 0040 { 0041 return !(*this == other); 0042 } 0043 0044 QString type{}; 0045 QString formattedType{}; 0046 QString value{}; 0047 FieldMetadata metadata{}; 0048 }; 0049 0050 ExternalId::ExternalId() 0051 : d(new Private) 0052 { 0053 } 0054 0055 ExternalId::ExternalId(const ExternalId &) = default; 0056 ExternalId::ExternalId(ExternalId &&) noexcept = default; 0057 ExternalId &ExternalId::operator=(const ExternalId &) = default; 0058 ExternalId &ExternalId::operator=(ExternalId &&) noexcept = default; 0059 ExternalId::~ExternalId() = default; 0060 0061 bool ExternalId::operator==(const ExternalId &other) const 0062 { 0063 return *d == *other.d; 0064 } 0065 0066 bool ExternalId::operator!=(const ExternalId &other) const 0067 { 0068 return !(*this == other); 0069 } 0070 0071 QString ExternalId::type() const 0072 { 0073 return d->type; 0074 } 0075 0076 void ExternalId::setType(const QString &value) 0077 { 0078 d->type = value; 0079 } 0080 QString ExternalId::formattedType() const 0081 { 0082 return d->formattedType; 0083 } 0084 QString ExternalId::value() const 0085 { 0086 return d->value; 0087 } 0088 0089 void ExternalId::setValue(const QString &value) 0090 { 0091 d->value = value; 0092 } 0093 FieldMetadata ExternalId::metadata() const 0094 { 0095 return d->metadata; 0096 } 0097 0098 void ExternalId::setMetadata(const FieldMetadata &value) 0099 { 0100 d->metadata = value; 0101 } 0102 0103 ExternalId ExternalId::fromJSON(const QJsonObject &obj) 0104 { 0105 ExternalId externalId; 0106 0107 if(!obj.isEmpty()) { 0108 const auto metadata = obj.value(QStringLiteral("metadata")).toObject(); 0109 externalId.d->metadata = FieldMetadata::fromJSON(metadata); 0110 externalId.d->value = obj.value(QStringLiteral("value")).toString(); 0111 externalId.d->type = obj.value(QStringLiteral("type")).toString(); 0112 externalId.d->formattedType = obj.value(QStringLiteral("formattedType")).toString(); 0113 } 0114 0115 return externalId; 0116 } 0117 0118 QList<ExternalId> ExternalId::fromJSONArray(const QJsonArray &data) 0119 { 0120 QList<ExternalId> externalIds; 0121 0122 for(const auto &externalId : data) { 0123 if(externalId.isObject()) { 0124 const auto objectifiedExternalId = externalId.toObject(); 0125 externalIds.append(fromJSON(objectifiedExternalId)); 0126 } 0127 } 0128 0129 return externalIds; 0130 } 0131 0132 QJsonValue ExternalId::toJSON() const 0133 { 0134 QJsonObject obj; 0135 0136 PeopleUtils::addValueToJsonObjectIfValid(obj, "type", d->type); 0137 // Output only -> PeopleUtils::addValueToJsonObjectIfValid(obj, "formattedType", d->formattedType); 0138 PeopleUtils::addValueToJsonObjectIfValid(obj, "value", d->value); 0139 // Skip, field metadata is only useful for receiving -> PeopleUtils::addValueToJsonObjectIfValid(obj, "metadata", d->metadata.toJSON()); 0140 return obj; 0141 } 0142 0143 } // namespace KGAPI2::People