userver: samples/grpc_service/src/greeter_client.hpp
Loading...
Searching...
No Matches
samples/grpc_service/src/greeter_client.hpp
#pragma once
#include <string_view>
#include <samples/greeter_client.usrv.pb.hpp>
namespace samples {
// A user-defined wrapper around api::GreeterServiceClient that handles
// the metadata and deadline bureaucracy and provides a simplified interface.
//
// Alternatively, you can use ugrpc::client::SimpleClientComponent directly.
//
// Note that we have both service and client to that service in the same
// microservice. Ignore that, it's just for the sake of example.
class GreeterClient final {
public:
explicit GreeterClient(api::GreeterServiceClient&& raw_client);
std::string SayHello(std::string name) const;
std::vector<std::string> SayHelloResponseStream(std::string name) const;
std::string SayHelloRequestStream(
const std::vector<std::string_view>& names) const;
std::vector<std::string> SayHelloStreams(
const std::vector<std::string_view>& names) const;
private:
static std::unique_ptr<grpc::ClientContext> MakeClientContext();
api::GreeterServiceClient raw_client_;
};
class GreeterClientComponent final : public components::ComponentBase {
public:
static constexpr std::string_view kName = "greeter-client";
GreeterClientComponent(const components::ComponentConfig& config,
const GreeterClient& GetClient() const;
static yaml_config::Schema GetStaticConfigSchema();
private:
ugrpc::client::ClientFactory& client_factory_;
GreeterClient client_;
};
} // namespace samples