5#ifndef QXMPPDATAFORMBASED_H
6#define QXMPPDATAFORMBASED_H
8#include "QXmppDataForm.h"
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 QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
47 if (variant.typeId() == QMetaType::Type::Bool) {
49 if (variant.type() == QVariant::Bool) {
51 return variant.toBool();
52#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
53 }
else if (variant.typeId() == QMetaType::Type::QString) {
55 }
else if (variant.type() == QVariant::String) {
57 auto string = variant.toString();
58 if (
string == u
"1" ||
string == u
"true") {
60 }
else if (
string == u
"0" ||
string == u
"false") {
76 if (!value.isNull()) {
77 serializeValue(form, type, name.toString(), value);
84 if (!value.isEmpty()) {
85 serializeValue(form, type, name.toString(), value);
89 template<
typename T,
typename ValueConverter = T (*)(T)>
93 if (optional.has_value()) {
94 serializeValue(form, type, name.toString(), convert(*optional));
101 if (optional.has_value()) {
102 serializeValue(form, type, name.toString(), QString::number(*optional));
109class QXmppExtensibleDataFormBasePrivate;
124 QList<QXmppDataForm::Field> unknownFields()
const;
125 void setUnknownFields(
const QList<QXmppDataForm::Field> &unknownFields);
134 QSharedDataPointer<QXmppExtensibleDataFormBasePrivate> d;
137namespace QXmpp::Private {
140concept DataFormConvertible =
requires(
const QXmppDataForm &form) {
142 { T::fromDataForm(form) } -> std::same_as<std::optional<T>>;
145template<DataFormConvertible T>
146inline constexpr auto DataFormType = T::DataFormType;