File indexing completed on 2024-04-28 03:55:30

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2020 Henri Chain <henri.chain@enioka.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #ifndef DBUSTYPES_H
0009 #define DBUSTYPES_H
0010 
0011 #include <QDBusArgument>
0012 
0013 struct QVariantMultiItem {
0014     QString key;
0015     QVariant value;
0016 };
0017 Q_DECLARE_METATYPE(QVariantMultiItem)
0018 using QVariantMultiMap = QList<QVariantMultiItem>;
0019 Q_DECLARE_METATYPE(QVariantMultiMap)
0020 
0021 inline QDBusArgument &operator<<(QDBusArgument &argument, const QVariantMultiItem &item)
0022 {
0023     argument.beginStructure();
0024     argument << item.key << QDBusVariant(item.value);
0025     argument.endStructure();
0026     return argument;
0027 }
0028 
0029 inline const QDBusArgument &operator>>(const QDBusArgument &argument, QVariantMultiItem &item)
0030 {
0031     argument.beginStructure();
0032     argument >> item.key >> item.value;
0033     argument.endStructure();
0034     return argument;
0035 }
0036 
0037 struct ExecCommand {
0038     QString path;
0039     QStringList argv;
0040     bool ignoreFailure;
0041 };
0042 Q_DECLARE_METATYPE(ExecCommand)
0043 using ExecCommandList = QList<ExecCommand>;
0044 Q_DECLARE_METATYPE(ExecCommandList)
0045 
0046 inline QDBusArgument &operator<<(QDBusArgument &argument, const ExecCommand &execCommand)
0047 {
0048     argument.beginStructure();
0049     argument << execCommand.path << execCommand.argv << execCommand.ignoreFailure;
0050     argument.endStructure();
0051     return argument;
0052 }
0053 
0054 inline const QDBusArgument &operator>>(const QDBusArgument &argument, ExecCommand &execCommand)
0055 {
0056     argument.beginStructure();
0057     argument >> execCommand.path >> execCommand.argv >> execCommand.ignoreFailure;
0058     argument.endStructure();
0059     return argument;
0060 }
0061 
0062 struct TransientAux {
0063     QString name;
0064     QVariantMultiMap properties;
0065 };
0066 Q_DECLARE_METATYPE(TransientAux)
0067 using TransientAuxList = QList<TransientAux>;
0068 Q_DECLARE_METATYPE(TransientAuxList)
0069 
0070 inline QDBusArgument &operator<<(QDBusArgument &argument, const TransientAux &aux)
0071 {
0072     argument.beginStructure();
0073     argument << aux.name << aux.properties;
0074     argument.endStructure();
0075     return argument;
0076 }
0077 
0078 inline const QDBusArgument &operator>>(const QDBusArgument &argument, TransientAux &aux)
0079 {
0080     argument.beginStructure();
0081     argument >> aux.name >> aux.properties;
0082     argument.endStructure();
0083     return argument;
0084 }
0085 
0086 #endif // DBUSTYPES_H