9#include <userver/dynamic_config/source.hpp>
10#include <userver/engine/task/task_processor_fwd.hpp>
11#include <userver/testsuite/grpc_control.hpp>
13#include <userver/ugrpc/client/client_factory_settings.hpp>
14#include <userver/ugrpc/client/client_settings.hpp>
15#include <userver/ugrpc/client/impl/client_dependencies.hpp>
16#include <userver/ugrpc/client/middlewares/base.hpp>
18USERVER_NAMESPACE_BEGIN
20namespace ugrpc::impl {
21class StatisticsStorage;
22class CompletionQueuePoolBase;
38class ClientFactory
final {
41 template <
typename Client>
42 Client
MakeClient(ClientSettings&& client_settings);
48 template <
typename Client>
49 Client
MakeClient(
const std::string& client_name,
const std::string& endpoint);
54 ClientFactorySettings&& client_factory_settings,
55 engine::TaskProcessor& channel_task_processor,
56 MiddlewareFactories mws,
57 ugrpc::impl::CompletionQueuePoolBase& completion_queues,
58 ugrpc::impl::StatisticsStorage& statistics_storage,
60 dynamic_config::Source config_source
65 impl::ClientDependencies MakeClientDependencies(ClientSettings&& settings);
67 ClientFactorySettings client_factory_settings_;
68 engine::TaskProcessor& channel_task_processor_;
69 MiddlewareFactories mws_;
70 ugrpc::impl::CompletionQueuePoolBase& completion_queues_;
71 ugrpc::impl::StatisticsStorage& client_statistics_storage_;
72 const dynamic_config::Source config_source_;
76template <
typename Client>
77Client ClientFactory::
MakeClient(ClientSettings&& settings) {
78 return Client(MakeClientDependencies(std::move(settings)));
81template <
typename Client>
82Client ClientFactory::
MakeClient(
const std::string& client_name,
const std::string& endpoint) {
83 ClientSettings settings;
84 settings.client_name = client_name;
85 settings.endpoint = endpoint;
86 return MakeClient<Client>(std::move(settings));