17 ::grpc::Status fail(::grpc::StatusCode code,
const char* message)
const noexcept;
19 ::grpc::Status failNoContext()
const noexcept;
21 ::grpc::Status failNoRequest()
const noexcept;
23 ::grpc::Status failNoResource(
const std::string& name)
const noexcept;
25 ::grpc::Status failStdException(
const std::exception& xcp)
const noexcept;
27 ::grpc::Status failUnknownException()
const noexcept;
41 const GrpcServerContext* context,
42 RequestType* request) noexcept
45 template <
typename Callable>
46 ::grpc::Status operator()(Callable&& callable)
const noexcept try {
48 return failNoContext();
51 return failNoRequest();
53 const auto resource = rs_->resource_manager()->resource<ServiceType>(request_->name());
55 return failNoResource(request_->name());
58 return invoke_(std::forward<Callable>(callable), std::move(resource));
59 }
catch (
const std::exception& xcp) {
60 return failStdException(xcp);
62 return failUnknownException();
65 auto getExtra()
const {
66 return request_->has_extra() ? from_proto(request_->extra()) : ProtoStruct{};
70#if __cplusplus >= 201703L
71 template <
typename Callable,
typename... Args>
72 using is_void_result = std::is_void<std::invoke_result_t<Callable, Args...>>;
74 template <
typename Callable,
typename... Args>
75 using is_void_result = std::is_void<std::result_of_t<Callable(Args...)>>;
81 template <
typename Callable,
82 typename ResourcePtrType,
83 std::enable_if_t<!is_void_result<Callable, ServiceHelper&, ResourcePtrType&&>::value,
85 ::grpc::Status invoke_(Callable&& callable, ResourcePtrType&& resource)
const {
86 return std::forward<Callable>(callable)(*
this, std::forward<ResourcePtrType>(resource));
92 template <
typename Callable,
93 typename ResourcePtrType,
94 std::enable_if_t<is_void_result<Callable, ServiceHelper&, ResourcePtrType&&>::value,
96 ::grpc::Status invoke_(Callable&& callable, ResourcePtrType&& resource)
const {
97 std::forward<Callable>(callable)(*
this, std::forward<ResourcePtrType>(resource));
102 const GrpcServerContext* context_;
103 RequestType* request_;
111 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