18 ::grpc::Status fail(::grpc::StatusCode code,
const char* message)
const noexcept;
20 ::grpc::Status failNoContext()
const noexcept;
22 ::grpc::Status failNoRequest()
const noexcept;
24 ::grpc::Status failNoResource(
const std::string& name)
const noexcept;
26 ::grpc::Status failStdException(
const std::exception& xcp)
const noexcept;
28 ::grpc::Status failUnknownException()
const noexcept;
42 const GrpcServerContext* context,
43 RequestType* request) noexcept
46 template <
typename Callable>
47 BOOST_ATTRIBUTE_NODISCARD ::grpc::Status operator()(Callable&& callable)
const noexcept try {
49 return failNoContext();
52 return failNoRequest();
54 const auto resource = rs_->resource_manager()->resource<ServiceType>(request_->name());
56 return failNoResource(request_->name());
59 return invoke_(std::forward<Callable>(callable), std::move(resource));
60 }
catch (
const std::exception& xcp) {
61 return failStdException(xcp);
63 return failUnknownException();
66 auto getExtra()
const {
67 return request_->has_extra() ? from_proto(request_->extra()) : ProtoStruct{};
71#if __cplusplus >= 201703L
72 template <
typename Callable,
typename... Args>
73 using is_void_result = std::is_void<std::invoke_result_t<Callable, Args...>>;
75 template <
typename Callable,
typename... Args>
76 using is_void_result = std::is_void<std::result_of_t<Callable(Args...)>>;
82 template <
typename Callable,
83 typename ResourcePtrType,
84 std::enable_if_t<!is_void_result<Callable, ServiceHelper&, ResourcePtrType&&>::value,
86 ::grpc::Status invoke_(Callable&& callable, ResourcePtrType&& resource)
const {
87 return std::forward<Callable>(callable)(*
this, std::forward<ResourcePtrType>(resource));
93 template <
typename Callable,
94 typename ResourcePtrType,
95 std::enable_if_t<is_void_result<Callable, ServiceHelper&, ResourcePtrType&&>::value,
97 ::grpc::Status invoke_(Callable&& callable, ResourcePtrType&& resource)
const {
98 std::forward<Callable>(callable)(*
this, std::forward<ResourcePtrType>(resource));
103 const GrpcServerContext* context_;
104 RequestType* request_;
112 return ServiceHelper<ServiceType, RequestType>{method, rs, context, request};
RAII helper for activating the gRPC context observer for the current thread.
Definition grpc_context_observer.hpp:10