/* Generated from Telepathy D-Bus Interface Specification, TelepathyQt copy, version 0.17.7 */

#define IN_TP_QT_HEADER
#include "TelepathyQt/types.h"

namespace Tp
{
TP_QT_EXPORT bool operator==(const AccessControl& v1, const AccessControl& v2)
{
    return ((v1.type == v2.type)
            && (v1.detail.variant() == v2.detail.variant())
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const AccessControl& val)
{
    arg.beginStructure();
    arg << val.type << val.detail;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, AccessControl& val)
{
    arg.beginStructure();
    arg >> val.type >> val.detail;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const AliasPair& v1, const AliasPair& v2)
{
    return ((v1.handle == v2.handle)
            && (v1.alias == v2.alias)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const AliasPair& val)
{
    arg.beginStructure();
    arg << val.handle << val.alias;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, AliasPair& val)
{
    arg.beginStructure();
    arg >> val.handle >> val.alias;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const Avatar& v1, const Avatar& v2)
{
    return ((v1.avatarData == v2.avatarData)
            && (v1.MIMEType == v2.MIMEType)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Avatar& val)
{
    arg.beginStructure();
    arg << val.avatarData << val.MIMEType;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Avatar& val)
{
    arg.beginStructure();
    arg >> val.avatarData >> val.MIMEType;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const CallStateReason& v1, const CallStateReason& v2)
{
    return ((v1.actor == v2.actor)
            && (v1.reason == v2.reason)
            && (v1.DBusReason == v2.DBusReason)
            && (v1.message == v2.message)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CallStateReason& val)
{
    arg.beginStructure();
    arg << val.actor << val.reason << val.DBusReason << val.message;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CallStateReason& val)
{
    arg.beginStructure();
    arg >> val.actor >> val.reason >> val.DBusReason >> val.message;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const Candidate& v1, const Candidate& v2)
{
    return ((v1.component == v2.component)
            && (v1.IP == v2.IP)
            && (v1.port == v2.port)
            && (v1.info == v2.info)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Candidate& val)
{
    arg.beginStructure();
    arg << val.component << val.IP << val.port << val.info;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Candidate& val)
{
    arg.beginStructure();
    arg >> val.component >> val.IP >> val.port >> val.info;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const CapabilityChange& v1, const CapabilityChange& v2)
{
    return ((v1.handle == v2.handle)
            && (v1.channelType == v2.channelType)
            && (v1.oldGenericFlags == v2.oldGenericFlags)
            && (v1.newGenericFlags == v2.newGenericFlags)
            && (v1.oldTypeSpecificFlags == v2.oldTypeSpecificFlags)
            && (v1.newTypeSpecificFlags == v2.newTypeSpecificFlags)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CapabilityChange& val)
{
    arg.beginStructure();
    arg << val.handle << val.channelType << val.oldGenericFlags << val.newGenericFlags << val.oldTypeSpecificFlags << val.newTypeSpecificFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CapabilityChange& val)
{
    arg.beginStructure();
    arg >> val.handle >> val.channelType >> val.oldGenericFlags >> val.newGenericFlags >> val.oldTypeSpecificFlags >> val.newTypeSpecificFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const CapabilityPair& v1, const CapabilityPair& v2)
{
    return ((v1.channelType == v2.channelType)
            && (v1.typeSpecificFlags == v2.typeSpecificFlags)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CapabilityPair& val)
{
    arg.beginStructure();
    arg << val.channelType << val.typeSpecificFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CapabilityPair& val)
{
    arg.beginStructure();
    arg >> val.channelType >> val.typeSpecificFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const CaptchaInfo& v1, const CaptchaInfo& v2)
{
    return ((v1.ID == v2.ID)
            && (v1.type == v2.type)
            && (v1.label == v2.label)
            && (v1.flags == v2.flags)
            && (v1.availableMIMETypes == v2.availableMIMETypes)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CaptchaInfo& val)
{
    arg.beginStructure();
    arg << val.ID << val.type << val.label << val.flags << val.availableMIMETypes;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CaptchaInfo& val)
{
    arg.beginStructure();
    arg >> val.ID >> val.type >> val.label >> val.flags >> val.availableMIMETypes;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ChannelDetails& v1, const ChannelDetails& v2)
{
    return ((v1.channel == v2.channel)
            && (v1.properties == v2.properties)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ChannelDetails& val)
{
    arg.beginStructure();
    arg << val.channel << val.properties;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ChannelDetails& val)
{
    arg.beginStructure();
    arg >> val.channel >> val.properties;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ChannelInfo& v1, const ChannelInfo& v2)
{
    return ((v1.channel == v2.channel)
            && (v1.channelType == v2.channelType)
            && (v1.handleType == v2.handleType)
            && (v1.handle == v2.handle)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ChannelInfo& val)
{
    arg.beginStructure();
    arg << val.channel << val.channelType << val.handleType << val.handle;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ChannelInfo& val)
{
    arg.beginStructure();
    arg >> val.channel >> val.channelType >> val.handleType >> val.handle;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ContactCapability& v1, const ContactCapability& v2)
{
    return ((v1.handle == v2.handle)
            && (v1.channelType == v2.channelType)
            && (v1.genericFlags == v2.genericFlags)
            && (v1.typeSpecificFlags == v2.typeSpecificFlags)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactCapability& val)
{
    arg.beginStructure();
    arg << val.handle << val.channelType << val.genericFlags << val.typeSpecificFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactCapability& val)
{
    arg.beginStructure();
    arg >> val.handle >> val.channelType >> val.genericFlags >> val.typeSpecificFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ContactInfoField& v1, const ContactInfoField& v2)
{
    return ((v1.fieldName == v2.fieldName)
            && (v1.parameters == v2.parameters)
            && (v1.fieldValue == v2.fieldValue)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactInfoField& val)
{
    arg.beginStructure();
    arg << val.fieldName << val.parameters << val.fieldValue;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactInfoField& val)
{
    arg.beginStructure();
    arg >> val.fieldName >> val.parameters >> val.fieldValue;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ContactSubscriptions& v1, const ContactSubscriptions& v2)
{
    return ((v1.subscribe == v2.subscribe)
            && (v1.publish == v2.publish)
            && (v1.publishRequest == v2.publishRequest)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactSubscriptions& val)
{
    arg.beginStructure();
    arg << val.subscribe << val.publish << val.publishRequest;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactSubscriptions& val)
{
    arg.beginStructure();
    arg >> val.subscribe >> val.publish >> val.publishRequest;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const CurrencyAmount& v1, const CurrencyAmount& v2)
{
    return ((v1.amount == v2.amount)
            && (v1.scale == v2.scale)
            && (v1.currency == v2.currency)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CurrencyAmount& val)
{
    arg.beginStructure();
    arg << val.amount << val.scale << val.currency;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CurrencyAmount& val)
{
    arg.beginStructure();
    arg >> val.amount >> val.scale >> val.currency;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const DBusTubeMember& v1, const DBusTubeMember& v2)
{
    return ((v1.handle == v2.handle)
            && (v1.uniqueName == v2.uniqueName)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const DBusTubeMember& val)
{
    arg.beginStructure();
    arg << val.handle << val.uniqueName;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, DBusTubeMember& val)
{
    arg.beginStructure();
    arg >> val.handle >> val.uniqueName;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const DebugMessage& v1, const DebugMessage& v2)
{
    return ((v1.timestamp == v2.timestamp)
            && (v1.domain == v2.domain)
            && (v1.level == v2.level)
            && (v1.message == v2.message)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const DebugMessage& val)
{
    arg.beginStructure();
    arg << val.timestamp << val.domain << val.level << val.message;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, DebugMessage& val)
{
    arg.beginStructure();
    arg >> val.timestamp >> val.domain >> val.level >> val.message;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const FieldSpec& v1, const FieldSpec& v2)
{
    return ((v1.name == v2.name)
            && (v1.parameters == v2.parameters)
            && (v1.flags == v2.flags)
            && (v1.max == v2.max)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const FieldSpec& val)
{
    arg.beginStructure();
    arg << val.name << val.parameters << val.flags << val.max;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, FieldSpec& val)
{
    arg.beginStructure();
    arg >> val.name >> val.parameters >> val.flags >> val.max;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const HTTPPostData& v1, const HTTPPostData& v2)
{
    return ((v1.key == v2.key)
            && (v1.value == v2.value)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const HTTPPostData& val)
{
    arg.beginStructure();
    arg << val.key << val.value;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, HTTPPostData& val)
{
    arg.beginStructure();
    arg >> val.key >> val.value;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const LocalPendingInfo& v1, const LocalPendingInfo& v2)
{
    return ((v1.toBeAdded == v2.toBeAdded)
            && (v1.actor == v2.actor)
            && (v1.reason == v2.reason)
            && (v1.message == v2.message)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const LocalPendingInfo& val)
{
    arg.beginStructure();
    arg << val.toBeAdded << val.actor << val.reason << val.message;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, LocalPendingInfo& val)
{
    arg.beginStructure();
    arg >> val.toBeAdded >> val.actor >> val.reason >> val.message;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MailAddress& v1, const MailAddress& v2)
{
    return ((v1.name == v2.name)
            && (v1.address == v2.address)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MailAddress& val)
{
    arg.beginStructure();
    arg << val.name << val.address;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MailAddress& val)
{
    arg.beginStructure();
    arg >> val.name >> val.address;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MediaDescriptionOffer& v1, const MediaDescriptionOffer& v2)
{
    return ((v1.mediaDescription == v2.mediaDescription)
            && (v1.properties == v2.properties)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaDescriptionOffer& val)
{
    arg.beginStructure();
    arg << val.mediaDescription << val.properties;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaDescriptionOffer& val)
{
    arg.beginStructure();
    arg >> val.mediaDescription >> val.properties;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MediaSessionHandlerInfo& v1, const MediaSessionHandlerInfo& v2)
{
    return ((v1.sessionHandler == v2.sessionHandler)
            && (v1.mediaSessionType == v2.mediaSessionType)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaSessionHandlerInfo& val)
{
    arg.beginStructure();
    arg << val.sessionHandler << val.mediaSessionType;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaSessionHandlerInfo& val)
{
    arg.beginStructure();
    arg >> val.sessionHandler >> val.mediaSessionType;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MediaStreamHandlerTransport& v1, const MediaStreamHandlerTransport& v2)
{
    return ((v1.componentNumber == v2.componentNumber)
            && (v1.IPAddress == v2.IPAddress)
            && (v1.port == v2.port)
            && (v1.protocol == v2.protocol)
            && (v1.subtype == v2.subtype)
            && (v1.profile == v2.profile)
            && (v1.preferenceValue == v2.preferenceValue)
            && (v1.transportType == v2.transportType)
            && (v1.username == v2.username)
            && (v1.password == v2.password)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerTransport& val)
{
    arg.beginStructure();
    arg << val.componentNumber << val.IPAddress << val.port << val.protocol << val.subtype << val.profile << val.preferenceValue << val.transportType << val.username << val.password;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerTransport& val)
{
    arg.beginStructure();
    arg >> val.componentNumber >> val.IPAddress >> val.port >> val.protocol >> val.subtype >> val.profile >> val.preferenceValue >> val.transportType >> val.username >> val.password;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MediaStreamInfo& v1, const MediaStreamInfo& v2)
{
    return ((v1.identifier == v2.identifier)
            && (v1.contact == v2.contact)
            && (v1.type == v2.type)
            && (v1.state == v2.state)
            && (v1.direction == v2.direction)
            && (v1.pendingSendFlags == v2.pendingSendFlags)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamInfo& val)
{
    arg.beginStructure();
    arg << val.identifier << val.contact << val.type << val.state << val.direction << val.pendingSendFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamInfo& val)
{
    arg.beginStructure();
    arg >> val.identifier >> val.contact >> val.type >> val.state >> val.direction >> val.pendingSendFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const NotDelegatedError& v1, const NotDelegatedError& v2)
{
    return ((v1.errorName == v2.errorName)
            && (v1.errorMessage == v2.errorMessage)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const NotDelegatedError& val)
{
    arg.beginStructure();
    arg << val.errorName << val.errorMessage;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, NotDelegatedError& val)
{
    arg.beginStructure();
    arg >> val.errorName >> val.errorMessage;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ParamSpec& v1, const ParamSpec& v2)
{
    return ((v1.name == v2.name)
            && (v1.flags == v2.flags)
            && (v1.signature == v2.signature)
            && (v1.defaultValue.variant() == v2.defaultValue.variant())
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ParamSpec& val)
{
    arg.beginStructure();
    arg << val.name << val.flags << val.signature << val.defaultValue;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ParamSpec& val)
{
    arg.beginStructure();
    arg >> val.name >> val.flags >> val.signature >> val.defaultValue;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const PendingTextMessage& v1, const PendingTextMessage& v2)
{
    return ((v1.identifier == v2.identifier)
            && (v1.unixTimestamp == v2.unixTimestamp)
            && (v1.sender == v2.sender)
            && (v1.messageType == v2.messageType)
            && (v1.flags == v2.flags)
            && (v1.text == v2.text)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PendingTextMessage& val)
{
    arg.beginStructure();
    arg << val.identifier << val.unixTimestamp << val.sender << val.messageType << val.flags << val.text;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PendingTextMessage& val)
{
    arg.beginStructure();
    arg >> val.identifier >> val.unixTimestamp >> val.sender >> val.messageType >> val.flags >> val.text;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const PropertyFlagsChange& v1, const PropertyFlagsChange& v2)
{
    return ((v1.propertyID == v2.propertyID)
            && (v1.newFlags == v2.newFlags)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertyFlagsChange& val)
{
    arg.beginStructure();
    arg << val.propertyID << val.newFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertyFlagsChange& val)
{
    arg.beginStructure();
    arg >> val.propertyID >> val.newFlags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const PropertySpec& v1, const PropertySpec& v2)
{
    return ((v1.propertyID == v2.propertyID)
            && (v1.name == v2.name)
            && (v1.signature == v2.signature)
            && (v1.flags == v2.flags)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertySpec& val)
{
    arg.beginStructure();
    arg << val.propertyID << val.name << val.signature << val.flags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertySpec& val)
{
    arg.beginStructure();
    arg >> val.propertyID >> val.name >> val.signature >> val.flags;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const PropertyValue& v1, const PropertyValue& v2)
{
    return ((v1.identifier == v2.identifier)
            && (v1.value.variant() == v2.value.variant())
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertyValue& val)
{
    arg.beginStructure();
    arg << val.identifier << val.value;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertyValue& val)
{
    arg.beginStructure();
    arg >> val.identifier >> val.value;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const RTCPFeedbackMessage& v1, const RTCPFeedbackMessage& v2)
{
    return ((v1.type == v2.type)
            && (v1.subtype == v2.subtype)
            && (v1.parameters == v2.parameters)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTCPFeedbackMessage& val)
{
    arg.beginStructure();
    arg << val.type << val.subtype << val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTCPFeedbackMessage& val)
{
    arg.beginStructure();
    arg >> val.type >> val.subtype >> val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const RTPHeaderExtension& v1, const RTPHeaderExtension& v2)
{
    return ((v1.ID == v2.ID)
            && (v1.direction == v2.direction)
            && (v1.URI == v2.URI)
            && (v1.parameters == v2.parameters)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTPHeaderExtension& val)
{
    arg.beginStructure();
    arg << val.ID << val.direction << val.URI << val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTPHeaderExtension& val)
{
    arg.beginStructure();
    arg >> val.ID >> val.direction >> val.URI >> val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const RequestableChannelClass& v1, const RequestableChannelClass& v2)
{
    return ((v1.fixedProperties == v2.fixedProperties)
            && (v1.allowedProperties == v2.allowedProperties)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RequestableChannelClass& val)
{
    arg.beginStructure();
    arg << val.fixedProperties << val.allowedProperties;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RequestableChannelClass& val)
{
    arg.beginStructure();
    arg >> val.fixedProperties >> val.allowedProperties;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const RichPresenceAccessControl& v1, const RichPresenceAccessControl& v2)
{
    return ((v1.type == v2.type)
            && (v1.detail.variant() == v2.detail.variant())
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RichPresenceAccessControl& val)
{
    arg.beginStructure();
    arg << val.type << val.detail;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RichPresenceAccessControl& val)
{
    arg.beginStructure();
    arg >> val.type >> val.detail;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const RoomInfo& v1, const RoomInfo& v2)
{
    return ((v1.handle == v2.handle)
            && (v1.channelType == v2.channelType)
            && (v1.info == v2.info)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RoomInfo& val)
{
    arg.beginStructure();
    arg << val.handle << val.channelType << val.info;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RoomInfo& val)
{
    arg.beginStructure();
    arg >> val.handle >> val.channelType >> val.info;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ServicePoint& v1, const ServicePoint& v2)
{
    return ((v1.servicePointType == v2.servicePointType)
            && (v1.service == v2.service)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ServicePoint& val)
{
    arg.beginStructure();
    arg << val.servicePointType << val.service;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ServicePoint& val)
{
    arg.beginStructure();
    arg >> val.servicePointType >> val.service;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const SimplePresence& v1, const SimplePresence& v2)
{
    return ((v1.type == v2.type)
            && (v1.status == v2.status)
            && (v1.statusMessage == v2.statusMessage)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SimplePresence& val)
{
    arg.beginStructure();
    arg << val.type << val.status << val.statusMessage;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SimplePresence& val)
{
    arg.beginStructure();
    arg >> val.type >> val.status >> val.statusMessage;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const SimpleStatusSpec& v1, const SimpleStatusSpec& v2)
{
    return ((v1.type == v2.type)
            && (v1.maySetOnSelf == v2.maySetOnSelf)
            && (v1.canHaveMessage == v2.canHaveMessage)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SimpleStatusSpec& val)
{
    arg.beginStructure();
    arg << val.type << val.maySetOnSelf << val.canHaveMessage;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SimpleStatusSpec& val)
{
    arg.beginStructure();
    arg >> val.type >> val.maySetOnSelf >> val.canHaveMessage;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const SocketAddressIP& v1, const SocketAddressIP& v2)
{
    return ((v1.address == v2.address)
            && (v1.port == v2.port)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIP& val)
{
    arg.beginStructure();
    arg << val.address << val.port;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIP& val)
{
    arg.beginStructure();
    arg >> val.address >> val.port;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const SocketAddressIPv4& v1, const SocketAddressIPv4& v2)
{
    return ((v1.address == v2.address)
            && (v1.port == v2.port)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIPv4& val)
{
    arg.beginStructure();
    arg << val.address << val.port;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIPv4& val)
{
    arg.beginStructure();
    arg >> val.address >> val.port;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const SocketAddressIPv6& v1, const SocketAddressIPv6& v2)
{
    return ((v1.address == v2.address)
            && (v1.port == v2.port)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIPv6& val)
{
    arg.beginStructure();
    arg << val.address << val.port;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIPv6& val)
{
    arg.beginStructure();
    arg >> val.address >> val.port;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const SocketNetmaskIPv4& v1, const SocketNetmaskIPv4& v2)
{
    return ((v1.address == v2.address)
            && (v1.prefixLength == v2.prefixLength)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketNetmaskIPv4& val)
{
    arg.beginStructure();
    arg << val.address << val.prefixLength;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketNetmaskIPv4& val)
{
    arg.beginStructure();
    arg >> val.address >> val.prefixLength;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const SocketNetmaskIPv6& v1, const SocketNetmaskIPv6& v2)
{
    return ((v1.address == v2.address)
            && (v1.prefixLength == v2.prefixLength)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketNetmaskIPv6& val)
{
    arg.beginStructure();
    arg << val.address << val.prefixLength;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketNetmaskIPv6& val)
{
    arg.beginStructure();
    arg >> val.address >> val.prefixLength;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const StreamCredentials& v1, const StreamCredentials& v2)
{
    return ((v1.username == v2.username)
            && (v1.password == v2.password)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const StreamCredentials& val)
{
    arg.beginStructure();
    arg << val.username << val.password;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, StreamCredentials& val)
{
    arg.beginStructure();
    arg >> val.username >> val.password;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const TLSCertificateRejection& v1, const TLSCertificateRejection& v2)
{
    return ((v1.reason == v2.reason)
            && (v1.error == v2.error)
            && (v1.details == v2.details)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const TLSCertificateRejection& val)
{
    arg.beginStructure();
    arg << val.reason << val.error << val.details;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, TLSCertificateRejection& val)
{
    arg.beginStructure();
    arg >> val.reason >> val.error >> val.details;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const TubeInfo& v1, const TubeInfo& v2)
{
    return ((v1.identifier == v2.identifier)
            && (v1.initiator == v2.initiator)
            && (v1.type == v2.type)
            && (v1.service == v2.service)
            && (v1.parameters == v2.parameters)
            && (v1.state == v2.state)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const TubeInfo& val)
{
    arg.beginStructure();
    arg << val.identifier << val.initiator << val.type << val.service << val.parameters << val.state;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, TubeInfo& val)
{
    arg.beginStructure();
    arg >> val.identifier >> val.initiator >> val.type >> val.service >> val.parameters >> val.state;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const VideoResolution& v1, const VideoResolution& v2)
{
    return ((v1.width == v2.width)
            && (v1.height == v2.height)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const VideoResolution& val)
{
    arg.beginStructure();
    arg << val.width << val.height;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, VideoResolution& val)
{
    arg.beginStructure();
    arg >> val.width >> val.height;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const CandidatePair& v1, const CandidatePair& v2)
{
    return ((v1.local == v2.local)
            && (v1.remote == v2.remote)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CandidatePair& val)
{
    arg.beginStructure();
    arg << val.local << val.remote;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CandidatePair& val)
{
    arg.beginStructure();
    arg >> val.local >> val.remote;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const Codec& v1, const Codec& v2)
{
    return ((v1.identifier == v2.identifier)
            && (v1.name == v2.name)
            && (v1.clockrate == v2.clockrate)
            && (v1.channels == v2.channels)
            && (v1.updated == v2.updated)
            && (v1.parameters == v2.parameters)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Codec& val)
{
    arg.beginStructure();
    arg << val.identifier << val.name << val.clockrate << val.channels << val.updated << val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Codec& val)
{
    arg.beginStructure();
    arg >> val.identifier >> val.name >> val.clockrate >> val.channels >> val.updated >> val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const HandlerCapabilities& v1, const HandlerCapabilities& v2)
{
    return ((v1.wellKnownName == v2.wellKnownName)
            && (v1.channelClasses == v2.channelClasses)
            && (v1.capabilities == v2.capabilities)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const HandlerCapabilities& val)
{
    arg.beginStructure();
    arg << val.wellKnownName << val.channelClasses << val.capabilities;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, HandlerCapabilities& val)
{
    arg.beginStructure();
    arg >> val.wellKnownName >> val.channelClasses >> val.capabilities;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const LastActivityAndStatuses& v1, const LastActivityAndStatuses& v2)
{
    return ((v1.lastActivity == v2.lastActivity)
            && (v1.statuses == v2.statuses)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const LastActivityAndStatuses& val)
{
    arg.beginStructure();
    arg << val.lastActivity << val.statuses;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, LastActivityAndStatuses& val)
{
    arg.beginStructure();
    arg >> val.lastActivity >> val.statuses;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MailURL& v1, const MailURL& v2)
{
    return ((v1.URL == v2.URL)
            && (v1.method == v2.method)
            && (v1.postData == v2.postData)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MailURL& val)
{
    arg.beginStructure();
    arg << val.URL << val.method << val.postData;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MailURL& val)
{
    arg.beginStructure();
    arg >> val.URL >> val.method >> val.postData;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MediaStreamHandlerCandidate& v1, const MediaStreamHandlerCandidate& v2)
{
    return ((v1.name == v2.name)
            && (v1.transports == v2.transports)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerCandidate& val)
{
    arg.beginStructure();
    arg << val.name << val.transports;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerCandidate& val)
{
    arg.beginStructure();
    arg >> val.name >> val.transports;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const MediaStreamHandlerCodec& v1, const MediaStreamHandlerCodec& v2)
{
    return ((v1.codecID == v2.codecID)
            && (v1.name == v2.name)
            && (v1.mediaType == v2.mediaType)
            && (v1.clockRate == v2.clockRate)
            && (v1.numberOfChannels == v2.numberOfChannels)
            && (v1.parameters == v2.parameters)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerCodec& val)
{
    arg.beginStructure();
    arg << val.codecID << val.name << val.mediaType << val.clockRate << val.numberOfChannels << val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerCodec& val)
{
    arg.beginStructure();
    arg >> val.codecID >> val.name >> val.mediaType >> val.clockRate >> val.numberOfChannels >> val.parameters;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const RTCPFeedbackMessageProperties& v1, const RTCPFeedbackMessageProperties& v2)
{
    return ((v1.RTCPMinimumInterval == v2.RTCPMinimumInterval)
            && (v1.messages == v2.messages)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTCPFeedbackMessageProperties& val)
{
    arg.beginStructure();
    arg << val.RTCPMinimumInterval << val.messages;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTCPFeedbackMessageProperties& val)
{
    arg.beginStructure();
    arg >> val.RTCPMinimumInterval >> val.messages;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const ServicePointInfo& v1, const ServicePointInfo& v2)
{
    return ((v1.servicePoint == v2.servicePoint)
            && (v1.serviceIDs == v2.serviceIDs)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ServicePointInfo& val)
{
    arg.beginStructure();
    arg << val.servicePoint << val.serviceIDs;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ServicePointInfo& val)
{
    arg.beginStructure();
    arg >> val.servicePoint >> val.serviceIDs;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT bool operator==(const StatusSpec& v1, const StatusSpec& v2)
{
    return ((v1.type == v2.type)
            && (v1.maySetOnSelf == v2.maySetOnSelf)
            && (v1.exclusive == v2.exclusive)
            && (v1.parameterTypes == v2.parameterTypes)
            );
}

TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const StatusSpec& val)
{
    arg.beginStructure();
    arg << val.type << val.maySetOnSelf << val.exclusive << val.parameterTypes;
    arg.endStructure();
    return arg;
}

TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, StatusSpec& val)
{
    arg.beginStructure();
    arg >> val.type >> val.maySetOnSelf >> val.exclusive >> val.parameterTypes;
    arg.endStructure();
    return arg;
}

TP_QT_NO_EXPORT void _registerTypes()
{
    static bool registered = false;
    if (registered)
        return;
    registered = true;

    qDBusRegisterMetaType<Tp::AccessControl>();
    qDBusRegisterMetaType<Tp::AddressingNormalizationMap>();
    qDBusRegisterMetaType<Tp::AliasMap>();
    qDBusRegisterMetaType<Tp::AliasPair>();
    qDBusRegisterMetaType<Tp::AliasPairList>();
    qDBusRegisterMetaType<Tp::Avatar>();
    qDBusRegisterMetaType<Tp::AvatarTokenMap>();
    qDBusRegisterMetaType<Tp::ByteArrayList>();
    qDBusRegisterMetaType<Tp::CallMemberMap>();
    qDBusRegisterMetaType<Tp::CallMemberMapList>();
    qDBusRegisterMetaType<Tp::CallStateReason>();
    qDBusRegisterMetaType<Tp::Candidate>();
    qDBusRegisterMetaType<Tp::CandidateInfo>();
    qDBusRegisterMetaType<Tp::CandidateList>();
    qDBusRegisterMetaType<Tp::CandidatePair>();
    qDBusRegisterMetaType<Tp::CandidatePairList>();
    qDBusRegisterMetaType<Tp::CapabilityChange>();
    qDBusRegisterMetaType<Tp::CapabilityChangeList>();
    qDBusRegisterMetaType<Tp::CapabilityPair>();
    qDBusRegisterMetaType<Tp::CapabilityPairList>();
    qDBusRegisterMetaType<Tp::CaptchaAnswers>();
    qDBusRegisterMetaType<Tp::CaptchaInfo>();
    qDBusRegisterMetaType<Tp::CaptchaInfoList>();
    qDBusRegisterMetaType<Tp::ChannelCallStateMap>();
    qDBusRegisterMetaType<Tp::ChannelClass>();
    qDBusRegisterMetaType<Tp::ChannelClassList>();
    qDBusRegisterMetaType<Tp::ChannelDetails>();
    qDBusRegisterMetaType<Tp::ChannelDetailsList>();
    qDBusRegisterMetaType<Tp::ChannelInfo>();
    qDBusRegisterMetaType<Tp::ChannelInfoList>();
    qDBusRegisterMetaType<Tp::ChannelOriginatorMap>();
    qDBusRegisterMetaType<Tp::ChatStateMap>();
    qDBusRegisterMetaType<Tp::Codec>();
    qDBusRegisterMetaType<Tp::CodecList>();
    qDBusRegisterMetaType<Tp::ComponentStateMap>();
    qDBusRegisterMetaType<Tp::ContactAttributesMap>();
    qDBusRegisterMetaType<Tp::ContactCapabilitiesMap>();
    qDBusRegisterMetaType<Tp::ContactCapabilitiesMapList>();
    qDBusRegisterMetaType<Tp::ContactCapability>();
    qDBusRegisterMetaType<Tp::ContactCapabilityList>();
    qDBusRegisterMetaType<Tp::ContactClientTypes>();
    qDBusRegisterMetaType<Tp::ContactCodecMap>();
    qDBusRegisterMetaType<Tp::ContactInfoField>();
    qDBusRegisterMetaType<Tp::ContactInfoFieldList>();
    qDBusRegisterMetaType<Tp::ContactInfoMap>();
    qDBusRegisterMetaType<Tp::ContactLocations>();
    qDBusRegisterMetaType<Tp::ContactMediaDescriptionPropertiesMap>();
    qDBusRegisterMetaType<Tp::ContactPresences>();
    qDBusRegisterMetaType<Tp::ContactSSRCsMap>();
    qDBusRegisterMetaType<Tp::ContactSearchMap>();
    qDBusRegisterMetaType<Tp::ContactSearchResultMap>();
    qDBusRegisterMetaType<Tp::ContactSendingStateMap>();
    qDBusRegisterMetaType<Tp::ContactSubscriptionMap>();
    qDBusRegisterMetaType<Tp::ContactSubscriptions>();
    qDBusRegisterMetaType<Tp::CurrencyAmount>();
    qDBusRegisterMetaType<Tp::DBusTubeMember>();
    qDBusRegisterMetaType<Tp::DBusTubeMemberList>();
    qDBusRegisterMetaType<Tp::DBusTubeParticipants>();
    qDBusRegisterMetaType<Tp::DebugMessage>();
    qDBusRegisterMetaType<Tp::DebugMessageList>();
    qDBusRegisterMetaType<Tp::FieldSpec>();
    qDBusRegisterMetaType<Tp::FieldSpecs>();
    qDBusRegisterMetaType<Tp::HTTPPostData>();
    qDBusRegisterMetaType<Tp::HTTPPostDataList>();
    qDBusRegisterMetaType<Tp::HandleIdentifierMap>();
    qDBusRegisterMetaType<Tp::HandleOwnerMap>();
    qDBusRegisterMetaType<Tp::HandlerCapabilities>();
    qDBusRegisterMetaType<Tp::HandlerCapabilitiesList>();
    qDBusRegisterMetaType<Tp::LastActivityAndStatuses>();
    qDBusRegisterMetaType<Tp::LocalPendingInfo>();
    qDBusRegisterMetaType<Tp::LocalPendingInfoList>();
    qDBusRegisterMetaType<Tp::Location>();
    qDBusRegisterMetaType<Tp::Mail>();
    qDBusRegisterMetaType<Tp::MailAddress>();
    qDBusRegisterMetaType<Tp::MailAddressList>();
    qDBusRegisterMetaType<Tp::MailList>();
    qDBusRegisterMetaType<Tp::MailURL>();
    qDBusRegisterMetaType<Tp::MediaDescriptionOffer>();
    qDBusRegisterMetaType<Tp::MediaDescriptionProperties>();
    qDBusRegisterMetaType<Tp::MediaSessionHandlerInfo>();
    qDBusRegisterMetaType<Tp::MediaSessionHandlerInfoList>();
    qDBusRegisterMetaType<Tp::MediaStreamHandlerCandidate>();
    qDBusRegisterMetaType<Tp::MediaStreamHandlerCandidateList>();
    qDBusRegisterMetaType<Tp::MediaStreamHandlerCodec>();
    qDBusRegisterMetaType<Tp::MediaStreamHandlerCodecList>();
    qDBusRegisterMetaType<Tp::MediaStreamHandlerTransport>();
    qDBusRegisterMetaType<Tp::MediaStreamHandlerTransportList>();
    qDBusRegisterMetaType<Tp::MediaStreamInfo>();
    qDBusRegisterMetaType<Tp::MediaStreamInfoList>();
    qDBusRegisterMetaType<Tp::MessagePart>();
    qDBusRegisterMetaType<Tp::MessagePartContentMap>();
    qDBusRegisterMetaType<Tp::MessagePartList>();
    qDBusRegisterMetaType<Tp::MessagePartListList>();
    qDBusRegisterMetaType<Tp::Metadata>();
    qDBusRegisterMetaType<Tp::MultipleStatusMap>();
    qDBusRegisterMetaType<Tp::NotDelegatedError>();
    qDBusRegisterMetaType<Tp::NotDelegatedMap>();
    qDBusRegisterMetaType<Tp::ObjectImmutablePropertiesMap>();
    qDBusRegisterMetaType<Tp::ObjectImmutablePropertiesMapList>();
    qDBusRegisterMetaType<Tp::ObjectPathList>();
    qDBusRegisterMetaType<Tp::ParamSpec>();
    qDBusRegisterMetaType<Tp::ParamSpecList>();
    qDBusRegisterMetaType<Tp::PendingTextMessage>();
    qDBusRegisterMetaType<Tp::PendingTextMessageList>();
    qDBusRegisterMetaType<Tp::PropertyFlagsChange>();
    qDBusRegisterMetaType<Tp::PropertyFlagsChangeList>();
    qDBusRegisterMetaType<Tp::PropertySpec>();
    qDBusRegisterMetaType<Tp::PropertySpecList>();
    qDBusRegisterMetaType<Tp::PropertyValue>();
    qDBusRegisterMetaType<Tp::PropertyValueList>();
    qDBusRegisterMetaType<Tp::ProtocolPropertiesMap>();
    qDBusRegisterMetaType<Tp::QualifiedPropertyValueMap>();
    qDBusRegisterMetaType<Tp::QualifiedPropertyValueMapList>();
    qDBusRegisterMetaType<Tp::RTCPFeedbackMessage>();
    qDBusRegisterMetaType<Tp::RTCPFeedbackMessageList>();
    qDBusRegisterMetaType<Tp::RTCPFeedbackMessageMap>();
    qDBusRegisterMetaType<Tp::RTCPFeedbackMessageProperties>();
    qDBusRegisterMetaType<Tp::RTPHeaderExtension>();
    qDBusRegisterMetaType<Tp::RTPHeaderExtensionsList>();
    qDBusRegisterMetaType<Tp::RequestableChannelClass>();
    qDBusRegisterMetaType<Tp::RequestableChannelClassList>();
    qDBusRegisterMetaType<Tp::RichPresenceAccessControl>();
    qDBusRegisterMetaType<Tp::RoomInfo>();
    qDBusRegisterMetaType<Tp::RoomInfoList>();
    qDBusRegisterMetaType<Tp::ServicePoint>();
    qDBusRegisterMetaType<Tp::ServicePointInfo>();
    qDBusRegisterMetaType<Tp::ServicePointInfoList>();
    qDBusRegisterMetaType<Tp::SimpleContactPresences>();
    qDBusRegisterMetaType<Tp::SimplePresence>();
    qDBusRegisterMetaType<Tp::SimpleStatusSpec>();
    qDBusRegisterMetaType<Tp::SimpleStatusSpecMap>();
    qDBusRegisterMetaType<Tp::SingleContactAttributesMap>();
    qDBusRegisterMetaType<Tp::SocketAddressIP>();
    qDBusRegisterMetaType<Tp::SocketAddressIPList>();
    qDBusRegisterMetaType<Tp::SocketAddressIPv4>();
    qDBusRegisterMetaType<Tp::SocketAddressIPv6>();
    qDBusRegisterMetaType<Tp::SocketNetmaskIPv4>();
    qDBusRegisterMetaType<Tp::SocketNetmaskIPv6>();
    qDBusRegisterMetaType<Tp::StatusSpec>();
    qDBusRegisterMetaType<Tp::StatusSpecMap>();
    qDBusRegisterMetaType<Tp::StreamCredentials>();
    qDBusRegisterMetaType<Tp::StringStringMap>();
    qDBusRegisterMetaType<Tp::StringStringMapList>();
    qDBusRegisterMetaType<Tp::StringVariantMap>();
    qDBusRegisterMetaType<Tp::StringVariantMapList>();
    qDBusRegisterMetaType<Tp::SupportedSocketMap>();
    qDBusRegisterMetaType<Tp::TLSCertificateRejection>();
    qDBusRegisterMetaType<Tp::TLSCertificateRejectionList>();
    qDBusRegisterMetaType<Tp::TubeInfo>();
    qDBusRegisterMetaType<Tp::TubeInfoList>();
    qDBusRegisterMetaType<Tp::UIntList>();
    qDBusRegisterMetaType<Tp::VCardFieldAddressMap>();
    qDBusRegisterMetaType<Tp::VideoResolution>();
    qDBusRegisterMetaType<Tp::VideoResolutionStruct>();
}

} // namespace Tp
