5 #ifndef QXMPPDATAFORMBASED_H 6 #define QXMPPDATAFORMBASED_H 8 #include "QXmppDataForm.h" 22 virtual QString formType()
const = 0;
26 std::optional<quint32>
parseUInt(
const QVariant &variant)
29 if (
const auto result = variant.toString().toUInt(&ok); ok) {
38 if (
const auto result = variant.toString().toULongLong(&ok); ok) {
44 std::optional<bool>
parseBool(
const QVariant &variant)
46 if (variant.typeId() == QMetaType::Type::Bool) {
47 return variant.toBool();
48 }
else if (variant.typeId() == QMetaType::Type::QString) {
49 auto string = variant.toString();
50 if (
string == u
"1" ||
string == u
"true") {
52 }
else if (
string == u
"0" ||
string == u
"false") {
68 if (!value.isNull()) {
69 serializeValue(form, type, name.toString(), value);
76 if (!value.isEmpty()) {
77 serializeValue(form, type, name.toString(), value);
81 template<
typename T,
typename ValueConverter = T (*)(T)>
85 if (optional.has_value()) {
86 serializeValue(form, type, name.toString(), convert(*optional));
93 if (optional.has_value()) {
94 serializeValue(form, type, name.toString(), QString::number(*optional));
101 class QXmppExtensibleDataFormBasePrivate;
116 QList<QXmppDataForm::Field> unknownFields()
const;
117 void setUnknownFields(
const QList<QXmppDataForm::Field> &unknownFields);
126 QSharedDataPointer<QXmppExtensibleDataFormBasePrivate> d;
132 concept DataFormConvertible = requires(
const QXmppDataForm &form) {
134 { T::fromDataForm(form) } -> std::same_as<std::optional<T>>;
137 template<DataFormConvertible T>
138 inline constexpr
auto DataFormType = T::DataFormType;
142 #endif // QXMPPDATAFORMBASED_H
Definition: Algorithms.h:14