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_;
};
using Client = GreeterClient;
class GreeterClientComponent final : public ugrpc::client::SimpleClientComponent<Client> {
public:
static constexpr std::string_view kName = "greeter-client";
GreeterClientComponent(const ::components::ComponentConfig& config, const ::components::ComponentContext& context)
: Base(config, context) {}
using Base::GetClient;
};
} // namespace samples