QGrpc{Channel, Call}Options: prefer 'set~()' over 'with~()'

It was concluded that we will use the 'set~()' syntax in our options but
still return a reference to allow chaining.

Task-number: QTBUG-123625
Change-Id: I00838465b485d096b4b7bd3d691d24385543d662
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
Dennis Oberst 2024-05-22 12:49:51 +02:00
parent 3551335272
commit 584a971d35
13 changed files with 76 additions and 74 deletions

View File

@ -50,7 +50,7 @@ void SimpleChatEngine::login(const QString &name, const QString &password)
{ "user-name", { name.toUtf8() } },
{ "user-password", { password.toUtf8() } },
};
channelOptions.withMetadata(metadata);
channelOptions.setMetadata(metadata);
std::shared_ptr<QAbstractGrpcChannel> channel = std::make_shared<QGrpcHttp2Channel>(
channelOptions);
// ![0]

View File

@ -65,7 +65,7 @@ QGrpcCallOptions &QGrpcCallOptions::operator=(QGrpcCallOptions &&other) noexcept
/*!
Sets deadline value with \a deadline and returns updated QGrpcCallOptions object.
*/
QGrpcCallOptions &QGrpcCallOptions::withDeadline(QGrpcDuration deadline)
QGrpcCallOptions &QGrpcCallOptions::setDeadline(QGrpcDuration deadline)
{
dPtr->deadline = deadline;
return *this;
@ -77,7 +77,7 @@ QGrpcCallOptions &QGrpcCallOptions::withDeadline(QGrpcDuration deadline)
For HTTP2-based channels, \a metadata is converted into HTTP/2 headers, that
added to the corresponding HTTP/2 request.
*/
QGrpcCallOptions &QGrpcCallOptions::withMetadata(const QGrpcMetadata &metadata)
QGrpcCallOptions &QGrpcCallOptions::setMetadata(const QGrpcMetadata &metadata)
{
dPtr->metadata = metadata;
return *this;
@ -86,9 +86,9 @@ QGrpcCallOptions &QGrpcCallOptions::withMetadata(const QGrpcMetadata &metadata)
/*!
Sets \a metadata for a call and returns updated QGrpcCallOptions object.
\sa withMetadata()
\sa setMetadata()
*/
QGrpcCallOptions &QGrpcCallOptions::withMetadata(QGrpcMetadata &&metadata) noexcept
QGrpcCallOptions &QGrpcCallOptions::setMetadata(QGrpcMetadata &&metadata) noexcept
{
dPtr->metadata = std::move(metadata);
return *this;

View File

@ -26,9 +26,9 @@ public:
Q_GRPC_EXPORT QGrpcCallOptions(QGrpcCallOptions &&other) noexcept;
Q_GRPC_EXPORT QGrpcCallOptions &operator=(QGrpcCallOptions &&other) noexcept;
Q_GRPC_EXPORT QGrpcCallOptions &withDeadline(QGrpcDuration deadline);
Q_GRPC_EXPORT QGrpcCallOptions &withMetadata(const QGrpcMetadata &metadata);
Q_GRPC_EXPORT QGrpcCallOptions &withMetadata(QGrpcMetadata &&metadata) noexcept;
Q_GRPC_EXPORT QGrpcCallOptions &setDeadline(QGrpcDuration deadline);
Q_GRPC_EXPORT QGrpcCallOptions &setMetadata(const QGrpcMetadata &metadata);
Q_GRPC_EXPORT QGrpcCallOptions &setMetadata(QGrpcMetadata &&metadata) noexcept;
[[nodiscard]] Q_GRPC_EXPORT std::optional<QGrpcDuration> deadline() const noexcept;
[[nodiscard]] Q_GRPC_EXPORT const QGrpcMetadata &metadata() const & noexcept;

View File

@ -84,7 +84,7 @@ QGrpcChannelOptions::~QGrpcChannelOptions() = default;
/*!
Sets host value with \a host and returns updated QGrpcChannelOptions object.
*/
QGrpcChannelOptions &QGrpcChannelOptions::withHost(const QUrl &host)
QGrpcChannelOptions &QGrpcChannelOptions::setHost(const QUrl &host)
{
dPtr->host = host;
return *this;
@ -93,7 +93,7 @@ QGrpcChannelOptions &QGrpcChannelOptions::withHost(const QUrl &host)
/*!
Sets deadline value with \a deadline and returns updated QGrpcChannelOptions object.
*/
QGrpcChannelOptions &QGrpcChannelOptions::withDeadline(QGrpcDuration deadline)
QGrpcChannelOptions &QGrpcChannelOptions::setDeadline(QGrpcDuration deadline)
{
dPtr->deadline = deadline;
return *this;
@ -105,7 +105,7 @@ QGrpcChannelOptions &QGrpcChannelOptions::withDeadline(QGrpcDuration deadline)
For HTTP2-based channels, \a metadata is converted into HTTP/2 headers, that
added to each HTTP/2 request.
*/
QGrpcChannelOptions &QGrpcChannelOptions::withMetadata(const QGrpcMetadata &metadata)
QGrpcChannelOptions &QGrpcChannelOptions::setMetadata(const QGrpcMetadata &metadata)
{
dPtr->metadata = metadata;
return *this;
@ -120,7 +120,7 @@ QGrpcChannelOptions &QGrpcChannelOptions::withMetadata(const QGrpcMetadata &meta
implementations.
*/
QGrpcChannelOptions &
QGrpcChannelOptions::withSerializationFormat(const QGrpcSerializationFormat &format)
QGrpcChannelOptions::setSerializationFormat(const QGrpcSerializationFormat &format)
{
dPtr->serializationFormat = format;
return *this;

View File

@ -31,10 +31,10 @@ public:
QGrpcChannelOptions(QGrpcChannelOptions &&other) noexcept;
QGrpcChannelOptions &operator=(QGrpcChannelOptions &&other) noexcept;
QGrpcChannelOptions &withHost(const QUrl &host);
QGrpcChannelOptions &withDeadline(QGrpcDuration deadline);
QGrpcChannelOptions &withMetadata(const QGrpcMetadata &metadata);
QGrpcChannelOptions &withSerializationFormat(const QGrpcSerializationFormat &format);
QGrpcChannelOptions &setHost(const QUrl &host);
QGrpcChannelOptions &setDeadline(QGrpcDuration deadline);
QGrpcChannelOptions &setMetadata(const QGrpcMetadata &metadata);
QGrpcChannelOptions &setSerializationFormat(const QGrpcSerializationFormat &format);
[[nodiscard]] QUrl host() const noexcept;
[[nodiscard]] std::optional<QGrpcDuration> deadline() const noexcept;

View File

@ -61,7 +61,7 @@ using namespace Qt::StringLiterals;
\code
auto channelJson = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) }
.withMetadata({ { "content-type"_ba,
.setMetadata({ { "content-type"_ba,
"application/grpc+json"_ba } }));
\endcode
@ -73,7 +73,7 @@ using namespace Qt::StringLiterals;
};
auto channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) }
.withSerializationFormat(QGrpcSerializationFormat{ "dummy",
.setSerializationFormat(QGrpcSerializationFormat{ "dummy",
std::make_shared<DummySerializer>() }));
\endcode
@ -593,15 +593,15 @@ QGrpcHttp2ChannelPrivate::QGrpcHttp2ChannelPrivate(const QGrpcChannelOptions &op
if (it != channelOptions.metadata().end()) {
if (formatSuffix.isEmpty() && it->second != DefaultContentType) {
if (it->second == "application/grpc+json") {
channelOptions.withSerializationFormat(QGrpcSerializationFormat{
channelOptions.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Json });
} else if (it->second == "application/grpc+proto" || it->second == DefaultContentType) {
channelOptions.withSerializationFormat(QGrpcSerializationFormat{
channelOptions.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Protobuf });
} else {
qGrpcWarning() << "Cannot choose the serializer for " << ContentTypeHeader
<< it->second << ". Using protobuf format as the default one.";
channelOptions.withSerializationFormat(QGrpcSerializationFormat{
channelOptions.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Default });
}
} else if (it->second != contentTypeFromOptions) {

View File

@ -24,7 +24,7 @@ qint64 QQmlGrpcCallOptions::deadline() const
void QQmlGrpcCallOptions::setDeadline(qint64 value)
{
QGrpcDuration ms(value);
m_options.withDeadline(ms);
m_options.setDeadline(ms);
emit deadlineChanged();
}
@ -43,9 +43,9 @@ void QQmlGrpcCallOptions::setMetadata(QQmlGrpcMetadata *value)
if (m_metadata != value) {
m_metadata = value;
if (m_metadata)
m_options.withMetadata(m_metadata->metadata());
m_options.setMetadata(m_metadata->metadata());
else
m_options.withMetadata(QGrpcMetadata());
m_options.setMetadata(QGrpcMetadata());
emit metadataChanged();
}
}

View File

@ -41,7 +41,7 @@ QUrl QQmlGrpcChannelOptions::host() const
void QQmlGrpcChannelOptions::setHost(const QUrl &newUrl)
{
Q_D(QQmlGrpcChannelOptions);
d->m_options.withHost(newUrl);
d->m_options.setHost(newUrl);
emit hostChanged();
}
@ -56,7 +56,7 @@ void QQmlGrpcChannelOptions::setDeadline(qint64 value)
{
Q_D(QQmlGrpcChannelOptions);
QGrpcDuration ms(value);
d->m_options.withDeadline(ms);
d->m_options.setDeadline(ms);
emit deadlineChanged();
}
@ -76,9 +76,9 @@ void QQmlGrpcChannelOptions::setMetadata(QQmlGrpcMetadata *value)
if (d->m_metadata != value) {
d->m_metadata = value;
if (d->m_metadata)
d->m_options.withMetadata(d->m_metadata->metadata());
d->m_options.setMetadata(d->m_metadata->metadata());
else
d->m_options.withMetadata(QGrpcMetadata());
d->m_options.setMetadata(QGrpcMetadata());
emit metadataChanged();
}
}
@ -94,7 +94,7 @@ void QQmlGrpcChannelOptions::setSerializationFormat(QQmlSerializationFormat::Grp
Q_D(QQmlGrpcChannelOptions);
if (d->m_format != format) {
d->m_format = format;
d->m_options.withSerializationFormat(QGrpcSerializationFormat{
d->m_options.setSerializationFormat(QGrpcSerializationFormat{
static_cast<QGrpcSerializationFormat::Format>(format) });
emit serializationFormatChanged();
}

View File

@ -44,7 +44,7 @@ void QtGrpcClientDeadlineTest::channelAndCallDeadlineTest()
const auto maxTimeoutDuration = QGrpcDuration(static_cast<int64_t>(MessageLatency
* maxTimeout));
QGrpcCallOptions callOpts;
callOpts.withDeadline(minTimeoutDuration);
callOpts.setDeadline(minTimeoutDuration);
SimpleStringMessage request;
request.setTestFieldString("sleep");

View File

@ -395,7 +395,7 @@ void QtGrpcClientServerStreamTest::deadline()
QFETCH(const int, ExpectedMessageCount);
QGrpcCallOptions opt;
opt.withDeadline(timeout);
opt.setDeadline(timeout);
SimpleStringMessage request;
request.setTestFieldString("Stream");

View File

@ -34,13 +34,13 @@ void GrpcClientTestBase::initTestCase_data()
<< QFlags{ Channel::Qt }
<< std::shared_ptr<QAbstractGrpcChannel>(new QGrpcHttp2Channel(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode) }
.withMetadata(md)));
.setMetadata(md)));
QTest::newRow("Http2ClientJsonUnix")
<< QFlags{ Channel::Qt }
<< std::shared_ptr<QAbstractGrpcChannel>(new QGrpcHttp2Channel(QGrpcChannelOptions{
QUrl("unix:///tmp/qtgrpc_test.sock", QUrl::StrictMode) }
.withMetadata(md)));
.setMetadata(md)));
}
#endif
@ -81,7 +81,7 @@ void GrpcClientTestBase::initTestCase_data()
<< std::shared_ptr<
QAbstractGrpcChannel>(new QGrpcHttp2Channel(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode) }
.withDeadline(channelTimeout)));
.setDeadline(channelTimeout)));
}
}

View File

@ -228,7 +228,10 @@ void QtGrpcClientUnaryCallTest::metadata()
QVERIFY(clientErrorSpy.isValid());
QGrpcCallOptions opt;
opt.withMetadata({ { "client_header", "1" }, { "client_return_header", "valid_value" } });
opt.setMetadata({
{ "client_header", "1" },
{ "client_return_header", "valid_value" }
});
auto reply = client()->testMetadata({}, opt);
QGrpcMetadata metadata;
@ -269,7 +272,7 @@ void QtGrpcClientUnaryCallTest::deadline()
QFETCH(const QGrpcDuration, timeout);
QGrpcCallOptions opt;
opt.withDeadline(timeout);
opt.setDeadline(timeout);
SimpleStringMessage request;
request.setTestFieldString("sleep");

View File

@ -123,20 +123,20 @@ void QGrpcHttp2ChannelTest::serializationFormat()
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) }
.withSerializationFormat(QGrpcSerializationFormat{
.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Json }));
QVERIFY(dynamic_cast<QProtobufJsonSerializer *>(channel->serializer().get()) != nullptr);
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) }
.withSerializationFormat(QGrpcSerializationFormat{
.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Protobuf }));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) }
.withSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
.setSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
QVERIFY(dynamic_cast<DummySerializer *>(channel->serializer().get()) != nullptr);
}
@ -146,7 +146,7 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc"_ba } }));
.setMetadata({ { "content-type"_ba, "application/grpc"_ba } }));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
// Initialize with various content-type headers
@ -154,41 +154,40 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba,
"application/grpc+json"_ba } }));
.setMetadata({ { "content-type"_ba, "application/grpc+json"_ba } }));
QVERIFY(dynamic_cast<QProtobufJsonSerializer *>(channel->serializer().get()) != nullptr);
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba,
"application/grpc+proto"_ba } }));
.setMetadata({ { "content-type"_ba,
"application/grpc+proto"_ba } }));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba,
"application/grpc+unknown"_ba } }));
.setMetadata({ { "content-type"_ba,
"application/grpc+unknown"_ba } }));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
// Initialize with the default content-type header and various serialization formats
channel = std::make_shared<QGrpcHttp2Channel>(QGrpcChannelOptions{
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba,
"application/grpc"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{}));
.setMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{}));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{
.setMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Json }));
QVERIFY(dynamic_cast<QProtobufJsonSerializer *>(channel->serializer().get()) != nullptr);
@ -196,8 +195,8 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{
.setMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Protobuf }));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
@ -205,9 +204,9 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.withSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
.setMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.setSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
QVERIFY(dynamic_cast<DummySerializer *>(channel->serializer().get()) != nullptr);
// Initialize with the content-type header incompatible with serialization format
@ -215,8 +214,8 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{
.setMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Protobuf }));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
@ -224,17 +223,17 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{}));
.setMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{}));
QVERIFY(dynamic_cast<QProtobufJsonSerializer *>(channel->serializer().get()) != nullptr);
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.withSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
.setMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.setSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
QVERIFY(dynamic_cast<DummySerializer *>(channel->serializer().get()) != nullptr);
// Initialize with the content-type header matching the serialization format
@ -242,8 +241,8 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc+proto"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{
.setMetadata({ { "content-type"_ba, "application/grpc+proto"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Protobuf }));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
@ -251,8 +250,8 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{
.setMetadata({ { "content-type"_ba, "application/grpc+json"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{
QGrpcSerializationFormat::Format::Json }));
QVERIFY(dynamic_cast<QProtobufJsonSerializer *>(channel->serializer().get()) != nullptr);
@ -260,17 +259,17 @@ void QGrpcHttp2ChannelTest::serializationFormatWithHeaders()
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.withSerializationFormat(QGrpcSerializationFormat{}));
.setMetadata({ { "content-type"_ba, "application/grpc"_ba } })
.setSerializationFormat(QGrpcSerializationFormat{}));
QVERIFY(dynamic_cast<QProtobufSerializer *>(channel->serializer().get()) != nullptr);
channel = std::make_shared<
QGrpcHttp2Channel>(QGrpcChannelOptions{
QUrl("http://localhost:50051", QUrl::StrictMode)
}
.withMetadata({ { "content-type"_ba, "application/grpc+dummy"_ba } })
.withSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
.setMetadata({ { "content-type"_ba, "application/grpc+dummy"_ba } })
.setSerializationFormat({ "dummy",
std::make_shared<DummySerializer>() }));
QVERIFY(dynamic_cast<DummySerializer *>(channel->serializer().get()) != nullptr);
}