mirror of https://github.com/qt/qtgrpc.git
QGrpc{Channel,Call}Options: Support incremental updates via addMetadata
Currently we only provide `setMetadata(~)` as a way for users to supply their metadata. However, certain code paths would benefit from having an `add` functionality as well, without requiring the user to create a temporary object. [ChangeLog][GRPC][QGrpc*Options] Added support for incrementally adding metadata via `addMetadata()`. Change-Id: Ibc5d721850745df5f171b9126b595ca9c6b0c319 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
parent
778371b8ea
commit
66984e6a3c
|
|
@ -256,6 +256,22 @@ QGrpcCallOptions::setMetadata(std::initializer_list<std::pair<QByteArray, QByteA
|
||||||
return setMetadata(QMultiHash<QByteArray, QByteArray>(list));
|
return setMetadata(QMultiHash<QByteArray, QByteArray>(list));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\include qgrpccommonoptions.cpp add-metadata
|
||||||
|
|
||||||
|
\include qgrpccalloptions.cpp merge-md-note
|
||||||
|
\l{QGrpcChannelOptions::addMetadata()}
|
||||||
|
*/
|
||||||
|
QGrpcCallOptions &QGrpcCallOptions::addMetadata(QByteArray key, QByteArray value)
|
||||||
|
{
|
||||||
|
if (d_ptr->metadata(QtGrpc::MultiValue).contains(key, value))
|
||||||
|
return *this;
|
||||||
|
d_ptr.detach();
|
||||||
|
Q_D(QGrpcCallOptions);
|
||||||
|
d->addMetadata(std::move(key), std::move(value));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG_STREAM
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
/*!
|
/*!
|
||||||
\since 6.8
|
\since 6.8
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ public:
|
||||||
Q_GRPC_EXPORT QGrpcCallOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
|
Q_GRPC_EXPORT QGrpcCallOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
|
||||||
Q_GRPC_EXPORT QGrpcCallOptions &
|
Q_GRPC_EXPORT QGrpcCallOptions &
|
||||||
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
||||||
|
Q_GRPC_EXPORT QGrpcCallOptions &addMetadata(QByteArray key, QByteArray value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QExplicitlySharedDataPointer<QGrpcCallOptionsPrivate> d_ptr;
|
QExplicitlySharedDataPointer<QGrpcCallOptionsPrivate> d_ptr;
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,22 @@ QGrpcChannelOptions::setMetadata(std::initializer_list<std::pair<QByteArray, QBy
|
||||||
return setMetadata(QMultiHash<QByteArray, QByteArray>(list));
|
return setMetadata(QMultiHash<QByteArray, QByteArray>(list));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\include qgrpccommonoptions.cpp add-metadata
|
||||||
|
|
||||||
|
\include qgrpcchanneloptions.cpp merge-md-note
|
||||||
|
\l{QGrpcCallOptions::addMetadata()}
|
||||||
|
*/
|
||||||
|
QGrpcChannelOptions &QGrpcChannelOptions::addMetadata(QByteArray key, QByteArray value)
|
||||||
|
{
|
||||||
|
if (d_ptr->metadata(QtGrpc::MultiValue).contains(key, value))
|
||||||
|
return *this;
|
||||||
|
d_ptr.detach();
|
||||||
|
Q_D(QGrpcChannelOptions);
|
||||||
|
d->addMetadata(std::move(key), std::move(value));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\since 6.8
|
\since 6.8
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ public:
|
||||||
Q_GRPC_EXPORT QGrpcChannelOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
|
Q_GRPC_EXPORT QGrpcChannelOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
|
||||||
Q_GRPC_EXPORT QGrpcChannelOptions &
|
Q_GRPC_EXPORT QGrpcChannelOptions &
|
||||||
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
||||||
|
Q_GRPC_EXPORT QGrpcChannelOptions &addMetadata(QByteArray key, QByteArray value);
|
||||||
|
|
||||||
[[nodiscard]] Q_GRPC_EXPORT QGrpcSerializationFormat serializationFormat() const;
|
[[nodiscard]] Q_GRPC_EXPORT QGrpcSerializationFormat serializationFormat() const;
|
||||||
Q_GRPC_EXPORT QGrpcChannelOptions &
|
Q_GRPC_EXPORT QGrpcChannelOptions &
|
||||||
|
|
|
||||||
|
|
@ -137,4 +137,24 @@ void QGrpcCommonOptions::setMetadata(QMultiHash<QByteArray, QByteArray> &&md)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
//! [add-metadata]
|
||||||
|
\since 6.10
|
||||||
|
|
||||||
|
Adds \a key and \a value to the \l metadata if the exact pair is not already contained.
|
||||||
|
The same key may appear multiple times with different values.
|
||||||
|
|
||||||
|
\sa {metadata(QtGrpc::MultiValueTag)}{metadata()} {setMetadata(const
|
||||||
|
QMultiHash<QByteArray, QByteArray>&)}{setMetadata()}
|
||||||
|
//! [add-metadata]
|
||||||
|
*/
|
||||||
|
void QGrpcCommonOptions::addMetadata(QByteArray &&key, QByteArray &&value)
|
||||||
|
{
|
||||||
|
#if QT_DEPRECATED_SINCE(6, 13)
|
||||||
|
if (m_deprecatedQHashRefUsed)
|
||||||
|
m_metadata.insertOrAssign(key, value);
|
||||||
|
#endif
|
||||||
|
m_metadataMulti.emplace(std::move(key), std::move(value));
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ public:
|
||||||
QMultiHash<QByteArray, QByteArray> metadata(QtGrpc::MultiValueTag /*tag*/) &&;
|
QMultiHash<QByteArray, QByteArray> metadata(QtGrpc::MultiValueTag /*tag*/) &&;
|
||||||
void setMetadata(const QMultiHash<QByteArray, QByteArray> &md);
|
void setMetadata(const QMultiHash<QByteArray, QByteArray> &md);
|
||||||
void setMetadata(QMultiHash<QByteArray, QByteArray> &&md);
|
void setMetadata(QMultiHash<QByteArray, QByteArray> &&md);
|
||||||
|
void addMetadata(QByteArray &&key, QByteArray &&value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::optional<std::chrono::milliseconds> m_timeout;
|
std::optional<std::chrono::milliseconds> m_timeout;
|
||||||
|
|
|
||||||
|
|
@ -210,6 +210,14 @@ QT_WARNING_POP
|
||||||
T o4;
|
T o4;
|
||||||
o4.setMetadata(list);
|
o4.setMetadata(list);
|
||||||
QCOMPARE_EQ(o4.metadata(QtGrpc::MultiValue), data);
|
QCOMPARE_EQ(o4.metadata(QtGrpc::MultiValue), data);
|
||||||
|
|
||||||
|
// addMetadata
|
||||||
|
T o5 = T{}.addMetadata("keyA", "valA1").addMetadata("keyA", "valA2");
|
||||||
|
auto o5Detach = o5;
|
||||||
|
QByteArray k = "keyB", v = "valB";
|
||||||
|
o5.addMetadata(k, v);
|
||||||
|
QCOMPARE_EQ(o5.metadata(QtGrpc::MultiValue), data);
|
||||||
|
QCOMPARE_NE(o5.metadata(QtGrpc::MultiValue), o5Detach.metadata(QtGrpc::MultiValue));
|
||||||
}
|
}
|
||||||
void propertyDeadline() const
|
void propertyDeadline() const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue