mirror of https://github.com/qt/qtgrpc.git
QGrpc{Call,Channel}Options: add 'filterServerMetadata'
This option enables to control the filtering of the received server
metadata. Both options provide it as optional<bool>, so that
QAbstractGrpcChannel implementations should choose a reasonable default.
This has not been provided to the QQml*Options, as there is currently no
available API to access the server metadata.
[ChangeLog][QGrpc{Call,Channel}Options] Added the filterServerMetadata
property.
Task-number: QTBUG-138363
Change-Id: I325a3b4f6e68d63f0828a6deb1a7be883247614b
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
parent
7695e0fc90
commit
25782e8866
|
|
@ -272,6 +272,33 @@ QGrpcCallOptions &QGrpcCallOptions::addMetadata(QByteArrayView key, QByteArrayVi
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\include qgrpccommonoptions.cpp filterServerMetadata
|
||||||
|
\sa QGrpcChannelOptions::filterServerMetadata()
|
||||||
|
*/
|
||||||
|
std::optional<bool> QGrpcCallOptions::filterServerMetadata() const noexcept
|
||||||
|
{
|
||||||
|
Q_D(const QGrpcCallOptions);
|
||||||
|
return d->filterServerMetadata();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\include qgrpccommonoptions.cpp setFilterServerMetadata
|
||||||
|
\note Setting this field \b{overrides} the corresponding channel options
|
||||||
|
field — see \l{QGrpcChannelOptions::setFilterServerMetadata()}
|
||||||
|
|
||||||
|
\sa QGrpcChannelOptions::setFilterServerMetadata()
|
||||||
|
*/
|
||||||
|
QGrpcCallOptions &QGrpcCallOptions::setFilterServerMetadata(bool value)
|
||||||
|
{
|
||||||
|
if (d_ptr->filterServerMetadata() == value)
|
||||||
|
return *this;
|
||||||
|
d_ptr.detach();
|
||||||
|
Q_D(QGrpcCallOptions);
|
||||||
|
d->setFilterServerMetadata(value);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG_STREAM
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
/*!
|
/*!
|
||||||
\since 6.8
|
\since 6.8
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,9 @@ public:
|
||||||
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
||||||
Q_GRPC_EXPORT QGrpcCallOptions &addMetadata(QByteArrayView key, QByteArrayView value);
|
Q_GRPC_EXPORT QGrpcCallOptions &addMetadata(QByteArrayView key, QByteArrayView value);
|
||||||
|
|
||||||
|
[[nodiscard]] Q_GRPC_EXPORT std::optional<bool> filterServerMetadata() const noexcept;
|
||||||
|
Q_GRPC_EXPORT QGrpcCallOptions &setFilterServerMetadata(bool value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QExplicitlySharedDataPointer<QGrpcCallOptionsPrivate> d_ptr;
|
QExplicitlySharedDataPointer<QGrpcCallOptionsPrivate> d_ptr;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -281,6 +281,34 @@ QGrpcChannelOptions &QGrpcChannelOptions::addMetadata(QByteArrayView key, QByteA
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\include qgrpccommonoptions.cpp filterServerMetadata
|
||||||
|
\sa QGrpcCallOptions::filterServerMetadata()
|
||||||
|
*/
|
||||||
|
std::optional<bool> QGrpcChannelOptions::filterServerMetadata() const noexcept
|
||||||
|
{
|
||||||
|
Q_D(const QGrpcChannelOptions);
|
||||||
|
return d->filterServerMetadata();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\include qgrpccommonoptions.cpp setFilterServerMetadata
|
||||||
|
|
||||||
|
\include qgrpcchanneloptions.cpp channel-note
|
||||||
|
\l{QGrpcCallOptions::filterServerMetadata}
|
||||||
|
|
||||||
|
\sa QGrpcCallOptions::setFilterServerMetadata()
|
||||||
|
*/
|
||||||
|
QGrpcChannelOptions &QGrpcChannelOptions::setFilterServerMetadata(bool value)
|
||||||
|
{
|
||||||
|
if (filterServerMetadata() == value)
|
||||||
|
return *this;
|
||||||
|
d_ptr.detach();
|
||||||
|
Q_D(QGrpcChannelOptions);
|
||||||
|
d->setFilterServerMetadata(value);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\since 6.8
|
\since 6.8
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,9 @@ public:
|
||||||
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list);
|
||||||
Q_GRPC_EXPORT QGrpcChannelOptions &addMetadata(QByteArrayView key, QByteArrayView value);
|
Q_GRPC_EXPORT QGrpcChannelOptions &addMetadata(QByteArrayView key, QByteArrayView value);
|
||||||
|
|
||||||
|
[[nodiscard]] Q_GRPC_EXPORT std::optional<bool> filterServerMetadata() const noexcept;
|
||||||
|
Q_GRPC_EXPORT QGrpcChannelOptions &setFilterServerMetadata(bool value);
|
||||||
|
|
||||||
[[nodiscard]] Q_GRPC_EXPORT QGrpcSerializationFormat serializationFormat() const;
|
[[nodiscard]] Q_GRPC_EXPORT QGrpcSerializationFormat serializationFormat() const;
|
||||||
Q_GRPC_EXPORT QGrpcChannelOptions &
|
Q_GRPC_EXPORT QGrpcChannelOptions &
|
||||||
setSerializationFormat(const QGrpcSerializationFormat &format);
|
setSerializationFormat(const QGrpcSerializationFormat &format);
|
||||||
|
|
|
||||||
|
|
@ -161,4 +161,36 @@ bool QGrpcCommonOptions::containsMetadata(QByteArrayView key, QByteArrayView val
|
||||||
return std::find(f, l, value) != l;
|
return std::find(f, l, value) != l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
//! [filterServerMetadata]
|
||||||
|
\since 6.11
|
||||||
|
|
||||||
|
Returns \c true if protocol-related server metadata is excluded from the
|
||||||
|
result. Returns \c false to include all metadata received from the server.
|
||||||
|
|
||||||
|
If this field is unset, returns an empty \c {std::optional}.
|
||||||
|
|
||||||
|
\sa setFilterServerMetadata()
|
||||||
|
//! [filterServerMetadata]
|
||||||
|
*/
|
||||||
|
std::optional<bool> QGrpcCommonOptions::filterServerMetadata() const noexcept
|
||||||
|
{
|
||||||
|
return m_filterServerMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
//! [setFilterServerMetadata]
|
||||||
|
\since 6.11
|
||||||
|
|
||||||
|
If \a value is \c true, protocol-related metadata defined by the gRPC
|
||||||
|
transport (such as reserved \c{grpc-} keys) will be excluded. If \a value
|
||||||
|
is \c false, all metadata received from the server will be included.
|
||||||
|
|
||||||
|
\sa filterServerMetadata()
|
||||||
|
*/
|
||||||
|
void QGrpcCommonOptions::setFilterServerMetadata(bool value)
|
||||||
|
{
|
||||||
|
m_filterServerMetadata = value;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
|
||||||
|
|
@ -50,12 +50,16 @@ public:
|
||||||
void addMetadata(QByteArray &&key, QByteArray &&value);
|
void addMetadata(QByteArray &&key, QByteArray &&value);
|
||||||
bool containsMetadata(QByteArrayView key, QByteArrayView value) const;
|
bool containsMetadata(QByteArrayView key, QByteArrayView value) const;
|
||||||
|
|
||||||
|
std::optional<bool> filterServerMetadata() const noexcept;
|
||||||
|
void setFilterServerMetadata(bool value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::optional<std::chrono::milliseconds> m_timeout;
|
std::optional<std::chrono::milliseconds> m_timeout;
|
||||||
QMultiHash<QByteArray, QByteArray> m_metadata;
|
QMultiHash<QByteArray, QByteArray> m_metadata;
|
||||||
#if QT_DEPRECATED_SINCE(6, 13)
|
#if QT_DEPRECATED_SINCE(6, 13)
|
||||||
QHash<QByteArray, QByteArray> m_deprecatedMetadata;
|
QHash<QByteArray, QByteArray> m_deprecatedMetadata;
|
||||||
#endif
|
#endif
|
||||||
|
std::optional<bool> m_filterServerMetadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace QtGrpcPrivate {
|
namespace QtGrpcPrivate {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ private Q_SLOTS:
|
||||||
#endif
|
#endif
|
||||||
void propertyMetadata() const { common.propertyMetadata(); }
|
void propertyMetadata() const { common.propertyMetadata(); }
|
||||||
void propertyDeadline() const { common.propertyDeadline(); }
|
void propertyDeadline() const { common.propertyDeadline(); }
|
||||||
|
void propertyFilterServerMetadata() const { common.propertyFilterServerMetadata(); }
|
||||||
void streamsToDebug() const { common.streamsToDebug(); }
|
void streamsToDebug() const { common.streamsToDebug(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ private Q_SLOTS:
|
||||||
#endif
|
#endif
|
||||||
void propertyMetadata() const { common.propertyMetadata(); }
|
void propertyMetadata() const { common.propertyMetadata(); }
|
||||||
void propertyDeadline() const { common.propertyDeadline(); }
|
void propertyDeadline() const { common.propertyDeadline(); }
|
||||||
|
void propertyFilterServerMetadata() const { common.propertyFilterServerMetadata(); }
|
||||||
void streamsToDebug() const { common.streamsToDebug(); }
|
void streamsToDebug() const { common.streamsToDebug(); }
|
||||||
|
|
||||||
void propertySerializationFormat() const;
|
void propertySerializationFormat() const;
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,15 @@ QT_WARNING_POP
|
||||||
QCOMPARE_EQ(o1.deadlineTimeout(), Dur);
|
QCOMPARE_EQ(o1.deadlineTimeout(), Dur);
|
||||||
QCOMPARE_NE(o1.deadlineTimeout(), o1Detach.deadlineTimeout());
|
QCOMPARE_NE(o1.deadlineTimeout(), o1Detach.deadlineTimeout());
|
||||||
}
|
}
|
||||||
|
void propertyFilterServerMetadata() const
|
||||||
|
{
|
||||||
|
T o1;
|
||||||
|
QCOMPARE_EQ(o1.filterServerMetadata(), std::nullopt);
|
||||||
|
auto o1Detach = o1;
|
||||||
|
o1.setFilterServerMetadata(true);
|
||||||
|
QCOMPARE_NE(o1.filterServerMetadata(), o1Detach.filterServerMetadata());
|
||||||
|
QCOMPARE_EQ(o1.filterServerMetadata(), std::optional<bool>(true));
|
||||||
|
}
|
||||||
void streamsToDebug() const
|
void streamsToDebug() const
|
||||||
{
|
{
|
||||||
T o;
|
T o;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue