QtProtobuf  0.6
Protobuf plugin to generate Qt classes
qgrpccredentials.h
1 /*
2  * MIT License
3  *
4  * Copyright (c) 2019 Alexey Edelev <semlanik@gmail.com>
5  *
6  * This file is part of QtProtobuf project https://git.semlanik.org/semlanik/qtprotobuf
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a copy of this
9  * software and associated documentation files (the "Software"), to deal in the Software
10  * without restriction, including without limitation the rights to use, copy, modify,
11  * merge, publish, distribute, sublicense, and/or sell copies of the Software, and
12  * to permit persons to whom the Software is furnished to do so, subject to the following
13  * conditions:
14  *
15  * The above copyright notice and this permission notice shall be included in all copies
16  * or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
19  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
20  * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
21  * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23  * DEALINGS IN THE SOFTWARE.
24  */
25 
26 #pragma once //QGrpcCredentials
27 
28 #include "qtgrpcglobal.h"
29 #include "qabstractgrpccredentials.h"
30 
31 #include <memory>
32 #include <type_traits>
33 
34 namespace QtProtobuf {
35 
45 class Q_GRPC_EXPORT QGrpcCallCredentials {};
46 
56 class Q_GRPC_EXPORT QGrpcChannelCredentials {};
57 
64 template<typename Call, typename Channel,
65  typename std::enable_if_t<std::is_base_of<QtProtobuf::QGrpcCallCredentials, Call>::value &&
66  std::is_base_of<QtProtobuf::QGrpcChannelCredentials, Channel>::value, int> = 0>
67 class QGrpcCredentials final : public QAbstractGrpcCredentials
68 {
69 public:
70  QGrpcCredentials(const Call &call, const Channel &channel) :
71  mCall(call)
72  , mChannel(channel)
73  {
74  }
75 
76  QGrpcCredentials(const Call &call) :
77  mCall(call)
78  {
79  }
80 
81  QGrpcCredentials(const Channel &channel) :
82  mChannel(channel)
83  {
84  }
85 
86  QGrpcCredentialMap callCredentials() override {
87  return mCall();
88  }
89 
90  QGrpcCredentialMap channelCredentials() override {
91  return mChannel.channelCredentials();
92  }
93 
94 private:
96  QGrpcCredentials() = default;
97 
98  Call mCall;
99  Channel mChannel;
100 };
101 
105 extern Q_GRPC_EXPORT const char *SslConfigCredential;
106 
108 }
109 
111 template<typename Call, typename Channel,
112  typename std::enable_if_t<std::is_base_of<QtProtobuf::QGrpcCallCredentials, Call>::value &&
113  std::is_base_of<QtProtobuf::QGrpcChannelCredentials, Channel>::value, int> = 0>
114 std::unique_ptr<QtProtobuf::QAbstractGrpcCredentials> operator |(const Call &call, const Channel &channel)
115 {
116  return std::unique_ptr<QtProtobuf::QAbstractGrpcCredentials>(new QtProtobuf::QGrpcCredentials<Call, Channel>(call, channel));
117 }
118 
120 template<typename Call, typename Channel,
121  typename std::enable_if_t<std::is_base_of<QtProtobuf::QGrpcCallCredentials, Call>::value &&
122  std::is_base_of<QtProtobuf::QGrpcChannelCredentials, Channel>::value, int> = 0>
123 std::unique_ptr<QtProtobuf::QAbstractGrpcCredentials> operator |(const Channel &channel, const Call &call)
124 {
125  return std::unique_ptr<QtProtobuf::QAbstractGrpcCredentials>(new QtProtobuf::QGrpcCredentials<Call, Channel>(call, channel));
126 }
The QGrpcCallCredentials is base class for gRPC call credentials.
Definition: qgrpccredentials.h:45
The QGrpcChannelCredentials is base class for gRPC channel credentials.
Definition: qgrpccredentials.h:56
The QGrpcCredentials class is combination of call and channel credentials that is used by gRPC channe...
Definition: qgrpccredentials.h:68