Files
pilotclient/src/blackmisc/dbus.h
Lars Toenning bcc4bdd31e Add SPDX identifiers for REUSE compliance
Co-authored-by: Mat Sutcliffe <oktal3700@gmail.com>
2023-10-03 09:29:49 +02:00

111 lines
2.6 KiB
C++

// SPDX-FileCopyrightText: Copyright (C) 2014 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
//! \file
#ifndef BLACKMISC_DBUS_H
#define BLACKMISC_DBUS_H
#include "blackmisc/blackmiscexport.h"
#include <QFlags>
#include <QDBusArgument>
#include <type_traits>
#include <utility>
#include <string>
/*!
* Non member non-friend streaming for std::string
*/
QDBusArgument &operator<<(QDBusArgument &arg, const std::string &s);
/*!
* Operator for std::string from QDBusArgument.
*/
const QDBusArgument &operator>>(const QDBusArgument &arg, std::string &s);
// *INDENT-OFF*
/*!
* Operator for streaming enums to QDBusArgument.
*/
template <class E, std::enable_if_t<std::is_enum_v<E>, int> = 0>
QDBusArgument &operator<<(QDBusArgument &arg, const E &value)
{
arg.beginStructure();
arg << static_cast<int>(value);
arg.endStructure();
return arg;
}
/*!
* Operator for streaming enums from QDBusArgument.
*/
template <class E, std::enable_if_t<std::is_enum_v<E>, int> = 0>
const QDBusArgument &operator>>(const QDBusArgument &arg, E &value)
{
int temp;
arg.beginStructure();
arg >> temp;
arg.endStructure();
value = static_cast<E>(temp);
return arg;
}
/*!
* Operator for streaming QFlags to QDBusArgument.
*/
template <class T>
QDBusArgument &operator<<(QDBusArgument &arg, const QFlags<T> &value)
{
arg.beginStructure();
arg << static_cast<typename QFlags<T>::Int>(value);
arg.endStructure();
return arg;
}
/*!
* Operator for streaming QFlags from QDBusArgument.
*/
template <class T>
const QDBusArgument &operator>>(const QDBusArgument &arg, QFlags<T> &value)
{
typename QFlags<T>::Int temp = 0;
arg.beginStructure();
arg >> temp;
arg.endStructure();
value = static_cast<QFlags<T>>(temp);
return arg;
}
/*!
* Operator for streaming pairs to QDBusArgument.
*/
template <class A, class B>
QDBusArgument &operator<<(QDBusArgument &arg, const std::pair<A, B> &pair)
{
arg.beginStructure();
arg << pair.first << pair.second;
arg.endStructure();
return arg;
}
/*!
* Operator for streaming pairs from QDBusArgument.
*/
template <class A, class B>
const QDBusArgument &operator>>(const QDBusArgument &arg, std::pair<A, B> &pair)
{
arg.beginStructure();
arg >> pair.first >> pair.second;
arg.endStructure();
return arg;
}
// *INDENT-ON*
//! Windows: prevents unloading of QtDBus shared library until the process is terminated.
//! QtDBus must have been loaded already by the calling process.
//! Does nothing on non-Windows platforms.
BLACKMISC_EXPORT void preventQtDBusDllUnload();
#endif // guard