Revision control

Copy as Markdown

// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
// Qt-Security score:critical reason:data-parser
#include "grpctemplates.h"
using namespace ::QtGrpc;
const char *GrpcTemplates::ChildClassDeclarationTemplate()
{
return "\nclass $export_macro$$classname$ : public $parent_class$\n"
"{\n"
" Q_OBJECT\n";
}
const char *GrpcTemplates::ClientQmlDeclarationTemplate()
{
return " QML_NAMED_ELEMENT($service_name$Client)\n";
}
const char *GrpcTemplates::ClientMethodDeclarationAsyncTemplate()
{
return "[[nodiscard]]\n"
"std::unique_ptr<QGrpcCallReply> $method_name$(const $param_type$ &$param_name$);\n"
"[[nodiscard]]\n"
"std::unique_ptr<QGrpcCallReply> $method_name$(const $param_type$ &$param_name$, const "
"QGrpcCallOptions &options);\n";
}
const char *GrpcTemplates::ClientMethodDeclarationQmlTemplate()
{
return "Q_INVOKABLE void $method_name$(const $param_type$ &$param_name$, "
"const QJSValue &callback, "
"const QJSValue &errorCallback, "
"const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options = nullptr);\n";
}
const char *GrpcTemplates::ServerMethodDeclarationTemplate()
{
return "Q_INVOKABLE virtual $return_type$ $method_name$(const $param_type$ &$param_name$) = "
"0;\n";
}
const char *GrpcTemplates::ClientConstructorDeclarationTemplate()
{
return "explicit $classname$(QObject *parent = nullptr);\n";
}
const char *GrpcTemplates::ClientConstructorDefinitionTemplate()
{
return "\n$classname$::$classname$(QObject *parent)\n"
" : $parent_class$(\"$service_name$\"_L1, "
"parent)\n"
"{\n"
"}\n\n";
}
const char *GrpcTemplates::ClientDestructorDeclarationTemplate()
{
return "~$classname$() override;\n\n";
}
const char *GrpcTemplates::ClientDestructorDefinitionTemplate()
{
return "$classname$::~$classname$() = default;\n";
}
const char *GrpcTemplates::ClientQmlConstructorDefinitionTemplate()
{
return "\n$classname$::$classname$(QObject *parent)\n"
" : $parent_class$(parent)\n"
"{\n"
"}\n\n";
}
const char *GrpcTemplates::ClientMethodDefinitionAsyncTemplate()
{
return "\nstd::unique_ptr<QGrpcCallReply> $classname$::$method_name$(const $param_type$ "
"&$param_name$)\n"
"{\n"
" return $method_name$($param_name$, {});\n"
"}\n\n"
"\nstd::unique_ptr<QGrpcCallReply> $classname$::$method_name$(const $param_type$ "
"&$param_name$, const QGrpcCallOptions &options)\n"
"{\n"
" auto reply = call(\"$method_name$\"_L1, $param_name$, options);\n"
" if (auto *replyPtr = reply.get(); replyPtr != nullptr) {\n"
" setOperationResponseMetaType(replyPtr,"
" QMetaType::fromType<$return_type$>());\n"
" }\n"
" return reply;\n"
"}\n\n";
}
const char *GrpcTemplates::ClientMethodDefinitionQmlTemplate()
{
return "\nvoid $classname$::$method_name$(const $param_type$ &$param_name$,\n"
" const QJSValue &finishCallback,\n"
" const QJSValue &errorCallback,\n"
" const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options)\n"
"{\n"
" QJSEngine *jsEngine = qjsEngine(this);\n"
" if (jsEngine == nullptr) {\n"
" qWarning() << \"Unable to call $classname$::$method_name$, it's only callable "
"from JS engine context\";\n"
" return;\n"
" }\n\n"
" auto reply = Client::$method_name$($param_name$,"
" options ? options->options() : QGrpcCallOptions{});\n"
" QtGrpcQuickFunctional::makeCallConnections<$return_type$>(jsEngine,\n"
" std::move(reply), finishCallback, errorCallback);\n"
"}\n\n";
}
const char *GrpcTemplates::ClientMethodStreamDeclarationTemplate()
{
return "[[nodiscard]]\n"
"std::unique_ptr<QGrpc$stream_type$Stream> $method_name$(const $param_type$ "
"&$param_name$);\n"
"[[nodiscard]]\n"
"std::unique_ptr<QGrpc$stream_type$Stream> $method_name$(const $param_type$ "
"&$param_name$, const QGrpcCallOptions &options);\n";
}
const char *GrpcTemplates::ClientMethodStreamDefinitionTemplate()
{
return "std::unique_ptr<QGrpc$stream_type$Stream> $classname$::$method_name$("
"const $param_type$ &$param_name$)\n"
"{\n"
" return $method_name$($param_name$, {});"
"}\n\n"
"std::unique_ptr<QGrpc$stream_type$Stream> $classname$::$method_name$("
"const $param_type$ &$param_name$, const QGrpcCallOptions &options)\n"
"{\n"
" auto stream = $stream_type_lower$Stream(\"$method_name$\"_L1, $param_name$,"
" options);\n"
" if (auto *streamPtr = stream.get(); streamPtr != nullptr) {\n"
" setOperationResponseMetaType(streamPtr,"
" QMetaType::fromType<$return_type$>());\n"
" }\n"
" return stream;\n"
"}\n\n";
}
const char *GrpcTemplates::StreamSenderDeclarationQmlTemplate()
{
// We use the Q_MOC_RUN trick here to fool qmltyperegistrar. The template base class doesn't
// have any meta-type extras, and it cannot have them. So from the meta-type information
// perspective it behaves in exactly the same way as QObject.
return "class $export_macro$$sender_class_name$ : public QQmlGrpc$stream_type$StreamSender\n"
"{\n"
" Q_OBJECT\n"
" QML_NAMED_ELEMENT($sender_qml_name$)\n"
" QML_UNCREATABLE(\"$sender_qml_name$ can only be created by gRPC "
"client instance\")\n"
"\n"
" $sender_class_name$(QGrpc$stream_type$Stream *stream) : "
"QQmlGrpc$stream_type$StreamSender(stream) {}\n\n"
"public:\n"
" Q_INVOKABLE void writeMessage(const $param_type$ &$param_name$)\n"
" {\n"
" writeMessageImpl($param_name$);\n"
" }\n"
" friend class $service_name$::$classname$;\n"
"};\n\n";
}
const char *GrpcTemplates::ClientMethodServerStreamDeclarationQmlTemplate()
{
return "Q_INVOKABLE void $method_name$(const $param_type$ &$param_name$,\n"
" const QJSValue &messageCallback,\n"
" const QJSValue &finishCallback,\n"
" const QJSValue &errorCallback,\n"
" const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options = nullptr);\n";
}
const char *GrpcTemplates::ClientMethodClientStreamDeclarationQmlTemplate()
{
return "Q_INVOKABLE $sender_class_name$ *$method_name$("
"const $param_type$ &$param_name$,\n"
" const QJSValue &finishCallback,\n"
" const QJSValue &errorCallback,\n"
" const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options = nullptr);\n";
}
const char *GrpcTemplates::ClientMethodBidiStreamDeclarationQmlTemplate()
{
return "Q_INVOKABLE $sender_class_name$ *$method_name$("
"const $param_type$ &$param_name$,\n"
" const QJSValue &messageCallback,\n"
" const QJSValue &finishCallback,\n"
" const QJSValue &errorCallback,\n"
" const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options = nullptr);\n";
}
const char *GrpcTemplates::ClientMethodServerStreamDefinitionQmlTemplate()
{
return "\nvoid $classname$::$method_name$(const $param_type$ &$param_name$,\n"
" const QJSValue &messageCallback,\n"
" const QJSValue &finishCallback,\n"
" const QJSValue &errorCallback,\n"
" const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options)\n"
"{\n"
" QJSEngine *jsEngine = qjsEngine(this);\n"
" if (jsEngine == nullptr) {\n"
" qWarning() << \"Unable to call $classname$::$method_name$, it's only callable "
"from JS engine context\";\n"
" return;\n"
" }\n\n"
" auto stream = Client::$method_name$($param_name$,"
" options ? options->options() : QGrpcCallOptions{});\n"
" QtGrpcQuickFunctional::makeServerStreamConnections<$return_type$>(jsEngine,\n"
" std::move(stream),\n"
" messageCallback, finishCallback, errorCallback);\n"
"}\n\n";
}
const char *GrpcTemplates::ClientMethodClientStreamDefinitionQmlTemplate()
{
return "\n$sender_class_name$ *$classname$::$method_name$("
"const $param_type$ &$param_name$,\n"
" const QJSValue &finishCallback,\n"
" const QJSValue &errorCallback,\n"
" const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options)\n"
"{\n"
" QJSEngine *jsEngine = qjsEngine(this);\n"
" if (jsEngine == nullptr) {\n"
" qWarning() << \"Unable to call $classname$::$method_name$, it's only callable "
"from JS engine context\";\n"
" return nullptr;\n"
" }\n\n"
" auto stream = Client::$method_name$($param_name$,"
" options ? options->options() : QGrpcCallOptions{});\n"
" auto *sender = new $sender_class_name$(stream.get());\n"
" QtGrpcQuickFunctional::makeClientStreamConnections<$return_type$>(jsEngine,\n"
" std::move(stream), finishCallback, errorCallback);\n"
" QJSEngine::setObjectOwnership(sender, QJSEngine::JavaScriptOwnership);\n"
" return sender;\n"
"}\n\n";
}
const char *GrpcTemplates::ClientMethodBidiStreamDefinitionQmlTemplate()
{
return "\n$sender_class_name$ *$classname$::$method_name$("
"const $param_type$ &$param_name$,\n"
" const QJSValue &messageCallback,\n"
" const QJSValue &finishCallback,\n"
" const QJSValue &errorCallback,\n"
" const QtGrpcQuickPrivate::QQmlGrpcCallOptions *options)\n"
"{\n"
" QJSEngine *jsEngine = qjsEngine(this);\n"
" if (jsEngine == nullptr) {\n"
" qWarning() << \"Unable to call $classname$::$method_name$, it's only callable "
"from JS engine context\";\n"
" return nullptr;\n"
" }\n\n"
" auto stream = Client::$method_name$($param_name$,"
" options ? options->options() : QGrpcCallOptions {});\n"
" auto *sender = new $sender_class_name$(stream.get());\n"
" QtGrpcQuickFunctional::makeBidiStreamConnections<$return_type$>(jsEngine,\n"
" std::move(stream), messageCallback, finishCallback, "
"errorCallback);\n"
" QJSEngine::setObjectOwnership(sender, QJSEngine::JavaScriptOwnership);\n"
" return sender;\n"
"}\n\n";
}
const char *GrpcTemplates::GrpcClientFileSuffix()
{
return "_client.grpc";
}
const char *GrpcTemplates::GrpcServiceFileSuffix()
{
return "_service.grpc";
}