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));
|
||||
}
|
||||
|
||||
/*!
|
||||
\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
|
||||
/*!
|
||||
\since 6.8
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ public:
|
|||
Q_GRPC_EXPORT QGrpcCallOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
|
||||
Q_GRPC_EXPORT QGrpcCallOptions &
|
||||
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
||||
Q_GRPC_EXPORT QGrpcCallOptions &addMetadata(QByteArray key, QByteArray value);
|
||||
|
||||
private:
|
||||
QExplicitlySharedDataPointer<QGrpcCallOptionsPrivate> d_ptr;
|
||||
|
|
|
|||
|
|
@ -265,6 +265,22 @@ QGrpcChannelOptions::setMetadata(std::initializer_list<std::pair<QByteArray, QBy
|
|||
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
|
||||
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ public:
|
|||
Q_GRPC_EXPORT QGrpcChannelOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata);
|
||||
Q_GRPC_EXPORT QGrpcChannelOptions &
|
||||
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;
|
||||
Q_GRPC_EXPORT QGrpcChannelOptions &
|
||||
|
|
|
|||
|
|
@ -137,4 +137,24 @@ void QGrpcCommonOptions::setMetadata(QMultiHash<QByteArray, QByteArray> &&md)
|
|||
#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
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ public:
|
|||
QMultiHash<QByteArray, QByteArray> metadata(QtGrpc::MultiValueTag /*tag*/) &&;
|
||||
void setMetadata(const QMultiHash<QByteArray, QByteArray> &md);
|
||||
void setMetadata(QMultiHash<QByteArray, QByteArray> &&md);
|
||||
void addMetadata(QByteArray &&key, QByteArray &&value);
|
||||
|
||||
private:
|
||||
std::optional<std::chrono::milliseconds> m_timeout;
|
||||
|
|
|
|||
|
|
@ -210,6 +210,14 @@ QT_WARNING_POP
|
|||
T o4;
|
||||
o4.setMetadata(list);
|
||||
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
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue