blob: 33c1db411dd5f80de5b5af7b86a8e40f5512aaf1 [file] [log] [blame]
David Reiss00dcccf2007-07-21 01:18:10 +00001// Copyright (c) 2006- Facebook
2// Distributed under the Thrift Software License
3//
4// See accompanying file LICENSE or visit the Thrift site at:
5// http://developers.facebook.com/thrift/
6
7#ifndef _THRIFT_PROTOCOL_TONEWAYPROTOCOL_H_
8#define _THRIFT_PROTOCOL_TONEWAYPROTOCOL_H_ 1
9
10#include "TProtocol.h"
11
T Jake Lucianib5e62212009-01-31 22:36:20 +000012namespace apache { namespace thrift { namespace protocol {
David Reiss00dcccf2007-07-21 01:18:10 +000013
14/**
15 * Abstract class for implementing a protocol that can only be written,
16 * not read.
17 *
David Reiss00dcccf2007-07-21 01:18:10 +000018 */
19class TWriteOnlyProtocol : public TProtocol {
20 public:
21 /**
22 * @param subclass_name The name of the concrete subclass.
23 */
24 TWriteOnlyProtocol(boost::shared_ptr<TTransport> trans,
25 const std::string& subclass_name)
26 : TProtocol(trans)
27 , subclass_(subclass_name)
28 {}
29
30 // All writing functions remain abstract.
31
32 /**
33 * Reading functions all throw an exception.
34 */
35
36 uint32_t readMessageBegin(std::string& name,
David Reiss96d23882007-07-26 21:10:32 +000037 TMessageType& messageType,
38 int32_t& seqid) {
David Reiss00dcccf2007-07-21 01:18:10 +000039 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
40 subclass_ + " does not support reading (yet).");
41 }
42
43 uint32_t readMessageEnd() {
44 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
45 subclass_ + " does not support reading (yet).");
46 }
47
48 uint32_t readStructBegin(std::string& name) {
49 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
50 subclass_ + " does not support reading (yet).");
51 }
52
53 uint32_t readStructEnd() {
54 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
55 subclass_ + " does not support reading (yet).");
56 }
57
58 uint32_t readFieldBegin(std::string& name,
David Reiss96d23882007-07-26 21:10:32 +000059 TType& fieldType,
60 int16_t& fieldId) {
David Reiss00dcccf2007-07-21 01:18:10 +000061 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
62 subclass_ + " does not support reading (yet).");
63 }
David Reiss0c90f6f2008-02-06 22:18:40 +000064
David Reiss00dcccf2007-07-21 01:18:10 +000065 uint32_t readFieldEnd() {
66 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
67 subclass_ + " does not support reading (yet).");
68 }
David Reiss0c90f6f2008-02-06 22:18:40 +000069
David Reiss00dcccf2007-07-21 01:18:10 +000070 uint32_t readMapBegin(TType& keyType,
David Reiss96d23882007-07-26 21:10:32 +000071 TType& valType,
72 uint32_t& size) {
David Reiss00dcccf2007-07-21 01:18:10 +000073 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
74 subclass_ + " does not support reading (yet).");
75 }
76
77 uint32_t readMapEnd() {
78 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
79 subclass_ + " does not support reading (yet).");
80 }
81
82 uint32_t readListBegin(TType& elemType,
83 uint32_t& size) {
84 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
85 subclass_ + " does not support reading (yet).");
86 }
David Reiss0c90f6f2008-02-06 22:18:40 +000087
David Reiss00dcccf2007-07-21 01:18:10 +000088 uint32_t readListEnd() {
89 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
90 subclass_ + " does not support reading (yet).");
91 }
92
93 uint32_t readSetBegin(TType& elemType,
David Reiss96d23882007-07-26 21:10:32 +000094 uint32_t& size) {
David Reiss00dcccf2007-07-21 01:18:10 +000095 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
96 subclass_ + " does not support reading (yet).");
97 }
98
99 uint32_t readSetEnd() {
100 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
101 subclass_ + " does not support reading (yet).");
102 }
103
104 uint32_t readBool(bool& value) {
105 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
106 subclass_ + " does not support reading (yet).");
107 }
108
109 uint32_t readByte(int8_t& byte) {
110 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
111 subclass_ + " does not support reading (yet).");
112 }
113
114 uint32_t readI16(int16_t& i16) {
115 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
116 subclass_ + " does not support reading (yet).");
117 }
118
119 uint32_t readI32(int32_t& i32) {
120 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
121 subclass_ + " does not support reading (yet).");
122 }
123
124 uint32_t readI64(int64_t& i64) {
125 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
126 subclass_ + " does not support reading (yet).");
127 }
128
129 uint32_t readDouble(double& dub) {
130 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
131 subclass_ + " does not support reading (yet).");
132 }
133
134 uint32_t readString(std::string& str) {
135 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
136 subclass_ + " does not support reading (yet).");
137 }
138
David Reissc005b1b2008-02-15 01:38:18 +0000139 uint32_t readBinary(std::string& str) {
140 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
141 subclass_ + " does not support reading (yet).");
142 }
David Reiss00dcccf2007-07-21 01:18:10 +0000143
144 private:
145 std::string subclass_;
146};
147
David Reisse0e3d1b2008-04-08 05:06:45 +0000148
149/**
150 * Abstract class for implementing a protocol that can only be read,
151 * not written.
152 *
David Reisse0e3d1b2008-04-08 05:06:45 +0000153 */
154class TReadOnlyProtocol : public TProtocol {
155 public:
156 /**
157 * @param subclass_name The name of the concrete subclass.
158 */
159 TReadOnlyProtocol(boost::shared_ptr<TTransport> trans,
160 const std::string& subclass_name)
161 : TProtocol(trans)
162 , subclass_(subclass_name)
163 {}
164
165 // All reading functions remain abstract.
166
167 /**
168 * Writing functions all throw an exception.
169 */
170
171 uint32_t writeMessageBegin(const std::string& name,
172 const TMessageType messageType,
173 const int32_t seqid) {
174 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
175 subclass_ + " does not support writing (yet).");
176 }
177
178 uint32_t writeMessageEnd() {
179 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
180 subclass_ + " does not support writing (yet).");
181 }
182
183
David Reiss64120002008-04-29 23:12:24 +0000184 uint32_t writeStructBegin(const char* name) {
David Reisse0e3d1b2008-04-08 05:06:45 +0000185 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
186 subclass_ + " does not support writing (yet).");
187 }
188
189 uint32_t writeStructEnd() {
190 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
191 subclass_ + " does not support writing (yet).");
192 }
193
David Reiss64120002008-04-29 23:12:24 +0000194 uint32_t writeFieldBegin(const char* name,
David Reisse0e3d1b2008-04-08 05:06:45 +0000195 const TType fieldType,
196 const int16_t fieldId) {
197 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
198 subclass_ + " does not support writing (yet).");
199 }
200
201 uint32_t writeFieldEnd() {
202 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
203 subclass_ + " does not support writing (yet).");
204 }
205
206 uint32_t writeFieldStop() {
207 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
208 subclass_ + " does not support writing (yet).");
209 }
210
211 uint32_t writeMapBegin(const TType keyType,
212 const TType valType,
213 const uint32_t size) {
214 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
215 subclass_ + " does not support writing (yet).");
216 }
217
218 uint32_t writeMapEnd() {
219 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
220 subclass_ + " does not support writing (yet).");
221 }
222
223 uint32_t writeListBegin(const TType elemType,
224 const uint32_t size) {
225 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
226 subclass_ + " does not support writing (yet).");
227 }
228
229 uint32_t writeListEnd() {
230 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
231 subclass_ + " does not support writing (yet).");
232 }
233
234 uint32_t writeSetBegin(const TType elemType,
235 const uint32_t size) {
236 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
237 subclass_ + " does not support writing (yet).");
238 }
239
240 uint32_t writeSetEnd() {
241 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
242 subclass_ + " does not support writing (yet).");
243 }
244
245 uint32_t writeBool(const bool value) {
246 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
247 subclass_ + " does not support writing (yet).");
248 }
249
250 uint32_t writeByte(const int8_t byte) {
251 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
252 subclass_ + " does not support writing (yet).");
253 }
254
255 uint32_t writeI16(const int16_t i16) {
256 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
257 subclass_ + " does not support writing (yet).");
258 }
259
260 uint32_t writeI32(const int32_t i32) {
261 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
262 subclass_ + " does not support writing (yet).");
263 }
264
265 uint32_t writeI64(const int64_t i64) {
266 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
267 subclass_ + " does not support writing (yet).");
268 }
269
270 uint32_t writeDouble(const double dub) {
271 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
272 subclass_ + " does not support writing (yet).");
273 }
274
275 uint32_t writeString(const std::string& str) {
276 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
277 subclass_ + " does not support writing (yet).");
278 }
279
280 uint32_t writeBinary(const std::string& str) {
281 throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
282 subclass_ + " does not support writing (yet).");
283 }
284
285 private:
286 std::string subclass_;
287};
288
T Jake Lucianib5e62212009-01-31 22:36:20 +0000289}}} // apache::thrift::protocol
David Reiss00dcccf2007-07-21 01:18:10 +0000290
291#endif // #ifndef _THRIFT_PROTOCOL_TBINARYPROTOCOL_H_