xref: /aosp_15_r20/external/grpc-grpc/include/grpcpp/impl/rpc_method.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 //
2 //
3 // Copyright 2015 gRPC authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //
18 
19 #ifndef GRPCPP_IMPL_RPC_METHOD_H
20 #define GRPCPP_IMPL_RPC_METHOD_H
21 
22 #include <memory>
23 
24 #include <grpcpp/impl/codegen/channel_interface.h>
25 
26 namespace grpc {
27 namespace internal {
28 /// Descriptor of an RPC method
29 class RpcMethod {
30  public:
31   enum RpcType {
32     NORMAL_RPC = 0,
33     CLIENT_STREAMING,  // request streaming
34     SERVER_STREAMING,  // response streaming
35     BIDI_STREAMING
36   };
37 
RpcMethod(const char * name,RpcType type)38   RpcMethod(const char* name, RpcType type)
39       : name_(name),
40         suffix_for_stats_(nullptr),
41         method_type_(type),
42         channel_tag_(nullptr) {}
43 
RpcMethod(const char * name,const char * suffix_for_stats,RpcType type)44   RpcMethod(const char* name, const char* suffix_for_stats, RpcType type)
45       : name_(name),
46         suffix_for_stats_(suffix_for_stats),
47         method_type_(type),
48         channel_tag_(nullptr) {}
49 
RpcMethod(const char * name,RpcType type,const std::shared_ptr<ChannelInterface> & channel)50   RpcMethod(const char* name, RpcType type,
51             const std::shared_ptr<ChannelInterface>& channel)
52       : name_(name),
53         suffix_for_stats_(nullptr),
54         method_type_(type),
55         channel_tag_(channel->RegisterMethod(name)) {}
56 
RpcMethod(const char * name,const char * suffix_for_stats,RpcType type,const std::shared_ptr<ChannelInterface> & channel)57   RpcMethod(const char* name, const char* suffix_for_stats, RpcType type,
58             const std::shared_ptr<ChannelInterface>& channel)
59       : name_(name),
60         suffix_for_stats_(suffix_for_stats),
61         method_type_(type),
62         channel_tag_(channel->RegisterMethod(name)) {}
63 
name()64   const char* name() const { return name_; }
suffix_for_stats()65   const char* suffix_for_stats() const { return suffix_for_stats_; }
method_type()66   RpcType method_type() const { return method_type_; }
SetMethodType(RpcType type)67   void SetMethodType(RpcType type) { method_type_ = type; }
channel_tag()68   void* channel_tag() const { return channel_tag_; }
69 
70  private:
71   const char* const name_;
72   const char* const suffix_for_stats_;
73   RpcType method_type_;
74   void* const channel_tag_;
75 };
76 
77 }  // namespace internal
78 }  // namespace grpc
79 
80 #endif  // GRPCPP_IMPL_RPC_METHOD_H
81