19 ::grpc::Status fail(::grpc::StatusCode code,
const char* message)
const noexcept;
21 ::grpc::Status failNoContext()
const noexcept;
23 ::grpc::Status failNoRequest()
const noexcept;
25 ::grpc::Status failNoResource(
const std::string& name)
const noexcept;
27 ::grpc::Status failStdException(
const std::exception& xcp)
const noexcept;
29 ::grpc::Status failUnknownException()
const noexcept;
34 const char* method_name()
const noexcept {
47 const GrpcServerContext* context,
48 RequestType* request) noexcept
51 template <
typename Callable>
52 BOOST_ATTRIBUTE_NODISCARD ::grpc::Status operator()(Callable&& callable)
const noexcept try {
54 return failNoContext();
57 return failNoRequest();
59 const auto resource = rs_->resource_manager()->resource<ServiceType>(request_->name());
61 return failNoResource(request_->name());
69 return span_guard.commit(
70 invoke_(std::forward<Callable>(callable), std::move(resource)));
71 }
catch (
const std::exception& xcp) {
72 span_guard.record_exception(xcp);
75 span_guard.record_unknown_exception();
78 }
catch (
const std::exception& xcp) {
79 return failStdException(xcp);
81 return failUnknownException();
84 auto getExtra()
const {
85 return request_->has_extra() ? from_proto(request_->extra()) : ProtoStruct{};
89#if __cplusplus >= 201703L
90 template <
typename Callable,
typename... Args>
91 using is_void_result = std::is_void<std::invoke_result_t<Callable, Args...>>;
93 template <
typename Callable,
typename... Args>
94 using is_void_result = std::is_void<std::result_of_t<Callable(Args...)>>;
100 template <
typename Callable,
101 typename ResourcePtrType,
102 std::enable_if_t<!is_void_result<Callable, ServiceHelper&, ResourcePtrType&&>::value,
104 ::grpc::Status invoke_(Callable&& callable, ResourcePtrType&& resource)
const {
105 return std::forward<Callable>(callable)(*
this, std::forward<ResourcePtrType>(resource));
111 template <
typename Callable,
112 typename ResourcePtrType,
113 std::enable_if_t<is_void_result<Callable, ServiceHelper&, ResourcePtrType&&>::value,
115 ::grpc::Status invoke_(Callable&& callable, ResourcePtrType&& resource)
const {
116 std::forward<Callable>(callable)(*
this, std::forward<ResourcePtrType>(resource));
121 const GrpcServerContext* context_;
122 RequestType* request_;
130 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