auser-poolparty 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (424) hide show
  1. data/VERSION.yml +1 -1
  2. data/bin/cloud-compile +6 -1
  3. data/config/jeweler.rb +1 -3
  4. data/lib/cloud_providers/cloud_provider_instance.rb +11 -1
  5. data/lib/dependency_resolvers/chef/resources/chef_recipe.rb +51 -0
  6. data/lib/dependency_resolvers/chef.rb +12 -3
  7. data/lib/mixins/callbacks.rb +6 -2
  8. data/lib/poolparty/plugins/apache2/passenger_site.rb +2 -2
  9. data/test/fixtures/chef/recipes/sudo/attributes/sudoers.rb +30 -0
  10. data/test/fixtures/chef/recipes/sudo/recipes/default.rb +33 -0
  11. data/test/fixtures/chef/recipes/sudo/templates/default/sudoers.erb +22 -0
  12. data/test/lib/dependency_resolvers/chef/resources/chef_recipe_test.rb +21 -0
  13. data/test/lib/dependency_resolvers/chef_test.rb +8 -1
  14. data/vendor/gems/thrift/CHANGELOG +1 -0
  15. data/vendor/gems/thrift/Makefile.am +25 -6
  16. data/vendor/gems/thrift/Manifest +81 -0
  17. data/vendor/gems/thrift/README +17 -111
  18. data/vendor/gems/thrift/Rakefile +104 -0
  19. data/vendor/gems/thrift/{lib/hs/Setup.lhs → benchmark/Benchmark.thrift} +5 -4
  20. data/vendor/gems/thrift/benchmark/benchmark.rb +271 -0
  21. data/vendor/gems/thrift/benchmark/client.rb +74 -0
  22. data/vendor/gems/thrift/benchmark/server.rb +82 -0
  23. data/vendor/gems/thrift/benchmark/thin_server.rb +44 -0
  24. data/vendor/gems/thrift/ext/binary_protocol_accelerated.c +474 -0
  25. data/vendor/gems/thrift/{lib/cocoa/src/protocol/TProtocolException.m → ext/binary_protocol_accelerated.h} +1 -4
  26. data/vendor/gems/thrift/ext/compact_protocol.c +665 -0
  27. data/vendor/gems/thrift/{lib/cocoa/src/protocol/TProtocolException.h → ext/compact_protocol.h} +1 -6
  28. data/vendor/gems/thrift/ext/constants.h +95 -0
  29. data/vendor/gems/thrift/{contrib/fb303/Makefile.am → ext/extconf.rb} +8 -13
  30. data/vendor/gems/thrift/{compiler/cpp/src/platform.h → ext/macros.h} +18 -13
  31. data/vendor/gems/thrift/ext/memory_buffer.c +76 -0
  32. data/vendor/gems/thrift/{lib/csharp/src/Protocol/TMessageType.cs → ext/memory_buffer.h} +2 -13
  33. data/vendor/gems/thrift/ext/protocol.c +185 -0
  34. data/vendor/gems/thrift/{lib/csharp/src/TProcessor.cs → ext/protocol.h} +2 -11
  35. data/vendor/gems/thrift/ext/struct.c +606 -0
  36. data/vendor/gems/thrift/ext/struct.h +67 -0
  37. data/vendor/gems/thrift/ext/thrift_native.c +194 -0
  38. data/vendor/gems/thrift/lib/thrift/client.rb +62 -0
  39. data/vendor/gems/thrift/{contrib/fb303/py/fb303_scripts/__init__.py → lib/thrift/core_ext/fixnum.rb} +13 -4
  40. data/vendor/gems/thrift/{contrib/fb303/global_footer.mk → lib/thrift/core_ext.rb} +4 -2
  41. data/vendor/gems/thrift/lib/thrift/exceptions.rb +82 -0
  42. data/vendor/gems/thrift/lib/thrift/processor.rb +57 -0
  43. data/vendor/gems/thrift/lib/thrift/protocol/base_protocol.rb +290 -0
  44. data/vendor/gems/thrift/lib/thrift/protocol/binary_protocol.rb +225 -0
  45. data/vendor/gems/thrift/{cleanup.sh → lib/thrift/protocol/binary_protocol_accelerated.rb} +19 -42
  46. data/vendor/gems/thrift/lib/thrift/protocol/compact_protocol.rb +422 -0
  47. data/vendor/gems/thrift/lib/thrift/serializer/deserializer.rb +33 -0
  48. data/vendor/gems/thrift/{bootstrap.sh → lib/thrift/serializer/serializer.rb} +17 -18
  49. data/vendor/gems/thrift/lib/thrift/server/base_server.rb +31 -0
  50. data/vendor/gems/thrift/lib/thrift/server/mongrel_http_server.rb +58 -0
  51. data/vendor/gems/thrift/lib/thrift/server/nonblocking_server.rb +296 -0
  52. data/vendor/gems/thrift/lib/thrift/server/simple_server.rb +43 -0
  53. data/vendor/gems/thrift/lib/thrift/server/thread_pool_server.rb +75 -0
  54. data/vendor/gems/thrift/lib/thrift/server/threaded_server.rb +47 -0
  55. data/vendor/gems/thrift/lib/thrift/struct.rb +298 -0
  56. data/vendor/gems/thrift/{contrib/fb303/bootstrap.sh → lib/thrift/thrift_native.rb} +5 -7
  57. data/vendor/gems/thrift/lib/{erl/Makefile → thrift/transport/base_server_transport.rb} +20 -20
  58. data/vendor/gems/thrift/lib/thrift/transport/base_transport.rb +70 -0
  59. data/vendor/gems/thrift/lib/thrift/transport/buffered_transport.rb +77 -0
  60. data/vendor/gems/thrift/lib/thrift/transport/framed_transport.rb +90 -0
  61. data/vendor/gems/thrift/lib/thrift/transport/http_client_transport.rb +45 -0
  62. data/vendor/gems/thrift/lib/thrift/transport/io_stream_transport.rb +39 -0
  63. data/vendor/gems/thrift/lib/thrift/transport/memory_buffer_transport.rb +96 -0
  64. data/vendor/gems/thrift/lib/thrift/transport/server_socket.rb +63 -0
  65. data/vendor/gems/thrift/lib/thrift/transport/socket.rb +136 -0
  66. data/vendor/gems/thrift/lib/{java/Makefile.am → thrift/transport/unix_server_socket.rb} +39 -17
  67. data/vendor/gems/thrift/{contrib/fb303/global_header.mk → lib/thrift/transport/unix_socket.rb} +23 -21
  68. data/vendor/gems/thrift/lib/thrift/types.rb +101 -0
  69. data/vendor/gems/thrift/lib/thrift.rb +59 -0
  70. data/vendor/gems/thrift/script/proto_benchmark.rb +121 -0
  71. data/vendor/gems/thrift/{lib/Makefile.am → script/read_struct.rb} +24 -36
  72. data/vendor/gems/thrift/{contrib/fb303/py/setup.py → script/write_struct.rb} +8 -5
  73. data/vendor/gems/thrift/setup.rb +1585 -0
  74. data/vendor/gems/thrift/spec/ThriftSpec.thrift +84 -0
  75. data/vendor/gems/thrift/spec/base_protocol_spec.rb +160 -0
  76. data/vendor/gems/thrift/spec/base_transport_spec.rb +351 -0
  77. data/vendor/gems/thrift/{contrib/fb303/py/Makefile.am → spec/binary_protocol_accelerated_spec.rb} +22 -25
  78. data/vendor/gems/thrift/spec/binary_protocol_spec.rb +63 -0
  79. data/vendor/gems/thrift/spec/binary_protocol_spec_shared.rb +375 -0
  80. data/vendor/gems/thrift/spec/client_spec.rb +100 -0
  81. data/vendor/gems/thrift/spec/compact_protocol_spec.rb +117 -0
  82. data/vendor/gems/thrift/spec/exception_spec.rb +142 -0
  83. data/vendor/gems/thrift/spec/http_client_spec.rb +49 -0
  84. data/vendor/gems/thrift/spec/mongrel_http_server_spec.rb +117 -0
  85. data/vendor/gems/thrift/spec/nonblocking_server_spec.rb +265 -0
  86. data/vendor/gems/thrift/spec/processor_spec.rb +83 -0
  87. data/vendor/gems/thrift/spec/serializer_spec.rb +69 -0
  88. data/vendor/gems/thrift/spec/server_socket_spec.rb +80 -0
  89. data/vendor/gems/thrift/spec/server_spec.rb +160 -0
  90. data/vendor/gems/thrift/spec/socket_spec.rb +61 -0
  91. data/vendor/gems/thrift/spec/socket_spec_shared.rb +104 -0
  92. data/vendor/gems/thrift/spec/spec_helper.rb +60 -0
  93. data/vendor/gems/thrift/spec/struct_spec.rb +252 -0
  94. data/vendor/gems/thrift/spec/types_spec.rb +116 -0
  95. data/vendor/gems/thrift/spec/unix_socket_spec.rb +108 -0
  96. data/vendor/gems/trollop/FAQ.txt +84 -0
  97. data/vendor/gems/trollop/History.txt +101 -0
  98. data/vendor/gems/trollop/Manifest.txt +7 -0
  99. data/vendor/gems/trollop/README.txt +40 -0
  100. data/vendor/gems/trollop/Rakefile +36 -0
  101. data/vendor/gems/trollop/lib/trollop.rb +739 -0
  102. data/vendor/gems/trollop/release-script.txt +13 -0
  103. data/vendor/gems/trollop/test/test_trollop.rb +1048 -0
  104. data/vendor/gems/trollop/www/index.html +172 -0
  105. metadata +123 -347
  106. data/vendor/gems/thrift/CHANGES +0 -35
  107. data/vendor/gems/thrift/CONTRIBUTORS +0 -77
  108. data/vendor/gems/thrift/DISCLAIMER +0 -6
  109. data/vendor/gems/thrift/LICENSE +0 -202
  110. data/vendor/gems/thrift/NEWS +0 -79
  111. data/vendor/gems/thrift/NOTICE +0 -26
  112. data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +0 -198
  113. data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +0 -107
  114. data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +0 -194
  115. data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +0 -173
  116. data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +0 -127
  117. data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +0 -39
  118. data/vendor/gems/thrift/compiler/cpp/Makefile.am +0 -136
  119. data/vendor/gems/thrift/compiler/cpp/README +0 -39
  120. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +0 -2331
  121. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +0 -3003
  122. data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +0 -1700
  123. data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +0 -932
  124. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +0 -173
  125. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +0 -321
  126. data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +0 -1445
  127. data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +0 -637
  128. data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +0 -3069
  129. data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +0 -1673
  130. data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +0 -77
  131. data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +0 -1812
  132. data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +0 -2281
  133. data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +0 -2310
  134. data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +0 -1114
  135. data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +0 -1071
  136. data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +0 -354
  137. data/vendor/gems/thrift/compiler/cpp/src/globals.h +0 -117
  138. data/vendor/gems/thrift/compiler/cpp/src/main.cc +0 -1207
  139. data/vendor/gems/thrift/compiler/cpp/src/main.h +0 -103
  140. data/vendor/gems/thrift/compiler/cpp/src/md5.c +0 -381
  141. data/vendor/gems/thrift/compiler/cpp/src/md5.h +0 -91
  142. data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +0 -137
  143. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +0 -59
  144. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +0 -121
  145. data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +0 -56
  146. data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +0 -51
  147. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +0 -59
  148. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +0 -64
  149. data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +0 -150
  150. data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +0 -93
  151. data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +0 -56
  152. data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +0 -64
  153. data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +0 -223
  154. data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +0 -86
  155. data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +0 -68
  156. data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +0 -55
  157. data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +0 -127
  158. data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +0 -176
  159. data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +0 -70
  160. data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +0 -303
  161. data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +0 -1140
  162. data/vendor/gems/thrift/configure.ac +0 -255
  163. data/vendor/gems/thrift/contrib/fb303/LICENSE +0 -16
  164. data/vendor/gems/thrift/contrib/fb303/README +0 -37
  165. data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +0 -258
  166. data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +0 -198
  167. data/vendor/gems/thrift/contrib/fb303/configure.ac +0 -115
  168. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +0 -124
  169. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +0 -103
  170. data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +0 -84
  171. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +0 -481
  172. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +0 -215
  173. data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +0 -112
  174. data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +0 -103
  175. data/vendor/gems/thrift/contrib/fb303/java/build.xml +0 -84
  176. data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +0 -89
  177. data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +0 -82
  178. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +0 -195
  179. data/vendor/gems/thrift/contrib/thrift.el +0 -126
  180. data/vendor/gems/thrift/contrib/thrift.spec +0 -206
  181. data/vendor/gems/thrift/contrib/thrift.vim +0 -91
  182. data/vendor/gems/thrift/contrib/thrift_dump.cpp +0 -91
  183. data/vendor/gems/thrift/doc/lgpl-2.1.txt +0 -504
  184. data/vendor/gems/thrift/doc/otp-base-license.txt +0 -20
  185. data/vendor/gems/thrift/doc/thrift.bnf +0 -96
  186. data/vendor/gems/thrift/doc/thrift.tex +0 -1057
  187. data/vendor/gems/thrift/lib/cocoa/README +0 -21
  188. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +0 -44
  189. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +0 -130
  190. data/vendor/gems/thrift/lib/cocoa/src/TException.h +0 -34
  191. data/vendor/gems/thrift/lib/cocoa/src/TException.m +0 -64
  192. data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +0 -29
  193. data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +0 -27
  194. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +0 -27
  195. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +0 -51
  196. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +0 -51
  197. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +0 -477
  198. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +0 -148
  199. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +0 -29
  200. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +0 -29
  201. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +0 -104
  202. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +0 -50
  203. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +0 -153
  204. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +0 -42
  205. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +0 -159
  206. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +0 -35
  207. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +0 -91
  208. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +0 -38
  209. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +0 -89
  210. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +0 -32
  211. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +0 -58
  212. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +0 -36
  213. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +0 -30
  214. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +0 -43
  215. data/vendor/gems/thrift/lib/cpp/Makefile.am +0 -158
  216. data/vendor/gems/thrift/lib/cpp/README +0 -67
  217. data/vendor/gems/thrift/lib/cpp/src/TLogging.h +0 -163
  218. data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +0 -53
  219. data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +0 -96
  220. data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +0 -148
  221. data/vendor/gems/thrift/lib/cpp/src/Thrift.h +0 -191
  222. data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +0 -60
  223. data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +0 -77
  224. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +0 -137
  225. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +0 -84
  226. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +0 -160
  227. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +0 -114
  228. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +0 -314
  229. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +0 -130
  230. data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +0 -125
  231. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +0 -493
  232. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +0 -169
  233. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +0 -284
  234. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +0 -122
  235. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +0 -55
  236. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +0 -100
  237. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +0 -155
  238. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +0 -354
  239. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +0 -379
  240. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +0 -155
  241. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +0 -122
  242. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +0 -77
  243. data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +0 -264
  244. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +0 -79
  245. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +0 -42
  246. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +0 -394
  247. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +0 -254
  248. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +0 -736
  249. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +0 -279
  250. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +0 -346
  251. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +0 -225
  252. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +0 -762
  253. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +0 -253
  254. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +0 -998
  255. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +0 -340
  256. data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +0 -304
  257. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +0 -438
  258. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +0 -104
  259. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +0 -187
  260. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +0 -750
  261. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +0 -435
  262. data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +0 -38
  263. data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +0 -213
  264. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +0 -118
  265. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +0 -70
  266. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +0 -217
  267. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +0 -79
  268. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +0 -243
  269. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +0 -74
  270. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +0 -370
  271. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +0 -667
  272. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +0 -77
  273. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +0 -73
  274. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +0 -953
  275. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +0 -442
  276. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +0 -348
  277. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +0 -111
  278. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +0 -368
  279. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +0 -76
  280. data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +0 -92
  281. data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +0 -96
  282. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +0 -54
  283. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +0 -41
  284. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +0 -591
  285. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +0 -242
  286. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +0 -235
  287. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +0 -191
  288. data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +0 -224
  289. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +0 -31
  290. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +0 -117
  291. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +0 -178
  292. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +0 -287
  293. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +0 -299
  294. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +0 -219
  295. data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +0 -30
  296. data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +0 -30
  297. data/vendor/gems/thrift/lib/cpp/thrift.pc.in +0 -29
  298. data/vendor/gems/thrift/lib/csharp/Makefile.am +0 -70
  299. data/vendor/gems/thrift/lib/csharp/README +0 -26
  300. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +0 -55
  301. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +0 -242
  302. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +0 -62
  303. data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +0 -142
  304. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +0 -34
  305. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +0 -392
  306. data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +0 -58
  307. data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +0 -50
  308. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +0 -58
  309. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +0 -58
  310. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +0 -87
  311. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +0 -61
  312. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +0 -29
  313. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +0 -94
  314. data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +0 -50
  315. data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +0 -42
  316. data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +0 -40
  317. data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +0 -135
  318. data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +0 -148
  319. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +0 -186
  320. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +0 -234
  321. data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +0 -131
  322. data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +0 -73
  323. data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +0 -35
  324. data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +0 -100
  325. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +0 -157
  326. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +0 -39
  327. data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +0 -144
  328. data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +0 -103
  329. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +0 -66
  330. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +0 -64
  331. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +0 -38
  332. data/vendor/gems/thrift/lib/erl/README +0 -56
  333. data/vendor/gems/thrift/lib/erl/build/beamver +0 -59
  334. data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +0 -15
  335. data/vendor/gems/thrift/lib/erl/build/colors.mk +0 -24
  336. data/vendor/gems/thrift/lib/erl/build/docs.mk +0 -12
  337. data/vendor/gems/thrift/lib/erl/build/mime.types +0 -98
  338. data/vendor/gems/thrift/lib/erl/build/otp.mk +0 -146
  339. data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +0 -85
  340. data/vendor/gems/thrift/lib/erl/build/raw_test.mk +0 -29
  341. data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +0 -54
  342. data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +0 -31
  343. data/vendor/gems/thrift/lib/erl/src/Makefile +0 -116
  344. data/vendor/gems/thrift/lib/erl/src/test_handler.erl +0 -26
  345. data/vendor/gems/thrift/lib/erl/src/test_service.erl +0 -29
  346. data/vendor/gems/thrift/lib/erl/src/thrift.app.src +0 -44
  347. data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +0 -1
  348. data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +0 -64
  349. data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +0 -325
  350. data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +0 -180
  351. data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +0 -384
  352. data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +0 -118
  353. data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +0 -87
  354. data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +0 -208
  355. data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +0 -199
  356. data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +0 -164
  357. data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +0 -188
  358. data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +0 -356
  359. data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +0 -183
  360. data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +0 -25
  361. data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +0 -249
  362. data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +0 -119
  363. data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +0 -57
  364. data/vendor/gems/thrift/lib/erl/vsn.mk +0 -1
  365. data/vendor/gems/thrift/lib/hs/README +0 -82
  366. data/vendor/gems/thrift/lib/hs/TODO +0 -2
  367. data/vendor/gems/thrift/lib/hs/Thrift.cabal +0 -20
  368. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +0 -147
  369. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +0 -191
  370. data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +0 -65
  371. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +0 -58
  372. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +0 -60
  373. data/vendor/gems/thrift/lib/hs/src/Thrift.hs +0 -111
  374. data/vendor/gems/thrift/lib/java/README +0 -43
  375. data/vendor/gems/thrift/lib/java/build.xml +0 -195
  376. data/vendor/gems/thrift/lib/java/ivy.xml +0 -8
  377. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +0 -171
  378. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +0 -123
  379. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +0 -66
  380. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +0 -102
  381. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +0 -46
  382. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +0 -94
  383. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +0 -45
  384. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +0 -30
  385. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +0 -32
  386. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +0 -39
  387. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +0 -110
  388. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +0 -69
  389. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +0 -42
  390. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +0 -29
  391. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +0 -31
  392. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +0 -29
  393. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +0 -31
  394. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +0 -128
  395. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +0 -331
  396. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +0 -741
  397. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +0 -48
  398. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +0 -927
  399. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +0 -38
  400. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +0 -40
  401. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +0 -48
  402. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +0 -31
  403. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +0 -146
  404. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +0 -81
  405. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +0 -30
  406. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +0 -158
  407. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +0 -42
  408. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +0 -384
  409. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +0 -36
  410. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +0 -40
  411. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +0 -304
  412. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +0 -772
  413. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +0 -126
  414. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +0 -145
  415. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +0 -271
  416. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +0 -126
  417. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +0 -157
  418. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +0 -159
  419. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +0 -98
  420. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +0 -160
  421. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +0 -31
  422. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +0 -213
  423. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +0 -31
  424. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +0 -145
@@ -1,1700 +0,0 @@
1
- /*
2
- * Licensed to the Apache Software Foundation (ASF) under one
3
- * or more contributor license agreements. See the NOTICE file
4
- * distributed with this work for additional information
5
- * regarding copyright ownership. The ASF licenses this file
6
- * to you under the Apache License, Version 2.0 (the
7
- * "License"); you may not use this file except in compliance
8
- * with the License. You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing,
13
- * software distributed under the License is distributed on an
14
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
- * KIND, either express or implied. See the License for the
16
- * specific language governing permissions and limitations
17
- * under the License.
18
- */
19
-
20
- #include <string>
21
- #include <fstream>
22
- #include <iostream>
23
- #include <vector>
24
-
25
- #include <stdlib.h>
26
- #include <sys/stat.h>
27
- #include <sstream>
28
-
29
- #include "platform.h"
30
- #include "t_oop_generator.h"
31
- using namespace std;
32
-
33
-
34
- class t_csharp_generator : public t_oop_generator
35
- {
36
- public:
37
- t_csharp_generator(
38
- t_program* program,
39
- const std::map<std::string, std::string>& parsed_options,
40
- const std::string& option_string)
41
- : t_oop_generator(program)
42
- {
43
- out_dir_base_ = "gen-csharp";
44
- }
45
- void init_generator();
46
- void close_generator();
47
-
48
- void generate_consts(std::vector<t_const*> consts);
49
-
50
- void generate_typedef (t_typedef* ttypedef);
51
- void generate_enum (t_enum* tenum);
52
- void generate_struct (t_struct* tstruct);
53
- void generate_xception (t_struct* txception);
54
- void generate_service (t_service* tservice);
55
- void generate_property(ofstream& out, t_field* tfield, bool isPublic);
56
- bool print_const_value (std::ofstream& out, std::string name, t_type* type, t_const_value* value, bool in_static, bool defval=false, bool needtype=false);
57
- std::string render_const_value(std::ofstream& out, std::string name, t_type* type, t_const_value* value);
58
- void print_const_constructor(std::ofstream& out, std::vector<t_const*> consts);
59
- void print_const_def_value(std::ofstream& out, std::string name, t_type* type, t_const_value* value);
60
-
61
- void generate_csharp_struct(t_struct* tstruct, bool is_exception);
62
- void generate_csharp_struct_definition(std::ofstream& out, t_struct* tstruct, bool is_xception=false, bool in_class=false, bool is_result=false);
63
- void generate_csharp_struct_reader(std::ofstream& out, t_struct* tstruct);
64
- void generate_csharp_struct_result_writer(std::ofstream& out, t_struct* tstruct);
65
- void generate_csharp_struct_writer(std::ofstream& out, t_struct* tstruct);
66
- void generate_csharp_struct_tostring(std::ofstream& out, t_struct* tstruct);
67
-
68
- void generate_function_helpers(t_function* tfunction);
69
- void generate_service_interface (t_service* tservice);
70
- void generate_service_helpers (t_service* tservice);
71
- void generate_service_client (t_service* tservice);
72
- void generate_service_server (t_service* tservice);
73
- void generate_process_function (t_service* tservice, t_function* function);
74
-
75
- void generate_deserialize_field (std::ofstream& out, t_field* tfield, std::string prefix="");
76
- void generate_deserialize_struct (std::ofstream& out, t_struct* tstruct, std::string prefix="");
77
- void generate_deserialize_container (std::ofstream& out, t_type* ttype, std::string prefix="");
78
- void generate_deserialize_set_element (std::ofstream& out, t_set* tset, std::string prefix="");
79
- void generate_deserialize_map_element (std::ofstream& out, t_map* tmap, std::string prefix="");
80
- void generate_deserialize_list_element (std::ofstream& out, t_list* list, std::string prefix="");
81
- void generate_serialize_field (std::ofstream& out, t_field* tfield, std::string prefix="");
82
- void generate_serialize_struct (std::ofstream& out, t_struct* tstruct, std::string prefix="");
83
- void generate_serialize_container (std::ofstream& out, t_type* ttype, std::string prefix="");
84
- void generate_serialize_map_element (std::ofstream& out, t_map* tmap, std::string iter, std::string map);
85
- void generate_serialize_set_element (std::ofstream& out, t_set* tmap, std::string iter);
86
- void generate_serialize_list_element (std::ofstream& out, t_list* tlist, std::string iter);
87
-
88
- void start_csharp_namespace (std::ofstream& out);
89
- void end_csharp_namespace (std::ofstream& out);
90
-
91
- std::string csharp_type_usings();
92
- std::string csharp_thrift_usings();
93
-
94
- std::string type_name(t_type* ttype, bool in_countainer=false, bool in_init=false);
95
- std::string base_type_name(t_base_type* tbase, bool in_container=false);
96
- std::string declare_field(t_field* tfield, bool init=false);
97
- std::string function_signature(t_function* tfunction, std::string prefix="");
98
- std::string argument_list(t_struct* tstruct);
99
- std::string type_to_enum(t_type* ttype);
100
- std::string prop_name(t_field* tfield);
101
-
102
- bool type_can_be_null(t_type* ttype) {
103
- while (ttype->is_typedef()) {
104
- ttype = ((t_typedef*)ttype)->get_type();
105
- }
106
-
107
- return ttype->is_container() ||
108
- ttype->is_struct() ||
109
- ttype->is_xception() ||
110
- ttype->is_string();
111
- }
112
-
113
- private:
114
- std::string namespace_name_;
115
- std::ofstream f_service_;
116
- std::string namespace_dir_;
117
- };
118
-
119
-
120
- void t_csharp_generator::init_generator() {
121
- MKDIR(get_out_dir().c_str());
122
- namespace_name_ = program_->get_namespace("csharp");
123
-
124
- string dir = namespace_name_;
125
- string subdir = get_out_dir().c_str();
126
- string::size_type loc;
127
-
128
- while ((loc = dir.find(".")) != string::npos) {
129
- subdir = subdir + "/" + dir.substr(0, loc);
130
- MKDIR(subdir.c_str());
131
- dir = dir.substr(loc + 1);
132
- }
133
- if (dir.size() > 0) {
134
- subdir = subdir + "/" + dir;
135
- MKDIR(subdir.c_str());
136
- }
137
-
138
- namespace_dir_ = subdir;
139
- }
140
-
141
- void t_csharp_generator::start_csharp_namespace(ofstream& out) {
142
- if (!namespace_name_.empty()) {
143
- out <<
144
- "namespace " << namespace_name_ << "\n";
145
- scope_up(out);
146
- }
147
- }
148
-
149
- void t_csharp_generator::end_csharp_namespace(ofstream& out) {
150
- if (!namespace_name_.empty()) {
151
- scope_down(out);
152
- }
153
- }
154
-
155
- string t_csharp_generator::csharp_type_usings() {
156
- return string() +
157
- "using System;\n" +
158
- "using System.Collections;\n" +
159
- "using System.Collections.Generic;\n" +
160
- "using System.Text;\n" +
161
- "using System.IO;\n" +
162
- "using Thrift;\n" +
163
- "using Thrift.Collections;\n";
164
- }
165
-
166
- string t_csharp_generator::csharp_thrift_usings() {
167
- return string() +
168
- "using Thrift.Protocol;\n" +
169
- "using Thrift.Transport;\n";
170
- }
171
-
172
- void t_csharp_generator::close_generator() { }
173
- void t_csharp_generator::generate_typedef(t_typedef* ttypedef) {}
174
-
175
- void t_csharp_generator::generate_enum(t_enum* tenum) {
176
- string f_enum_name = namespace_dir_+"/" + (tenum->get_name())+".cs";
177
- ofstream f_enum;
178
- f_enum.open(f_enum_name.c_str());
179
-
180
- f_enum <<
181
- autogen_comment() << endl;
182
-
183
- start_csharp_namespace(f_enum);
184
-
185
- indent(f_enum) <<
186
- "public enum " << tenum->get_name() << "\n";
187
- scope_up(f_enum);
188
-
189
- vector<t_enum_value*> constants = tenum->get_constants();
190
- vector<t_enum_value*>::iterator c_iter;
191
- int value = -1;
192
- for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter)
193
- {
194
- if ((*c_iter)->has_value()) {
195
- value = (*c_iter)->get_value();
196
- } else {
197
- ++value;
198
- }
199
-
200
- indent(f_enum) <<
201
- (*c_iter)->get_name() <<
202
- " = " << value << "," << endl;
203
- }
204
-
205
- scope_down(f_enum);
206
-
207
- end_csharp_namespace(f_enum);
208
-
209
- f_enum.close();
210
- }
211
-
212
- void t_csharp_generator::generate_consts(std::vector<t_const*> consts) {
213
- if (consts.empty()){
214
- return;
215
- }
216
- string f_consts_name = namespace_dir_ + "/Constants.cs";
217
- ofstream f_consts;
218
- f_consts.open(f_consts_name.c_str());
219
-
220
- f_consts <<
221
- autogen_comment() <<
222
- csharp_type_usings() << endl;
223
-
224
- start_csharp_namespace(f_consts);
225
-
226
- indent(f_consts) <<
227
- "public class Constants" << endl;
228
- scope_up(f_consts);
229
-
230
- vector<t_const*>::iterator c_iter;
231
- bool need_static_constructor = false;
232
- for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
233
- if (print_const_value(f_consts, (*c_iter)->get_name(), (*c_iter)->get_type(), (*c_iter)->get_value(), false)) {
234
- need_static_constructor = true;
235
- }
236
- }
237
-
238
- if (need_static_constructor) {
239
- print_const_constructor(f_consts, consts);
240
- }
241
-
242
- scope_down(f_consts);
243
- end_csharp_namespace(f_consts);
244
- f_consts.close();
245
- }
246
-
247
- void t_csharp_generator::print_const_def_value(std::ofstream& out, string name, t_type* type, t_const_value* value)
248
- {
249
- if (type->is_struct() || type->is_xception()) {
250
- const vector<t_field*>& fields = ((t_struct*)type)->get_members();
251
- vector<t_field*>::const_iterator f_iter;
252
- const map<t_const_value*, t_const_value*>& val = value->get_map();
253
- map<t_const_value*, t_const_value*>::const_iterator v_iter;
254
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
255
- t_type* field_type = NULL;
256
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
257
- if ((*f_iter)->get_name() == v_iter->first->get_string()) {
258
- field_type = (*f_iter)->get_type();
259
- }
260
- }
261
- if (field_type == NULL) {
262
- throw "type error: " + type->get_name() + " has no field " + v_iter->first->get_string();
263
- }
264
- string val = render_const_value(out, name, field_type, v_iter->second);
265
- indent(out) << name << "." << v_iter->first->get_string() << " = " << val << ";" << endl;
266
- }
267
- } else if (type->is_map()) {
268
- t_type* ktype = ((t_map*)type)->get_key_type();
269
- t_type* vtype = ((t_map*)type)->get_val_type();
270
- const map<t_const_value*, t_const_value*>& val = value->get_map();
271
- map<t_const_value*, t_const_value*>::const_iterator v_iter;
272
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
273
- string key = render_const_value(out, name, ktype, v_iter->first);
274
- string val = render_const_value(out, name, vtype, v_iter->second);
275
- indent(out) << name << "[" << key << "]" << " = " << val << ";" << endl;
276
- }
277
- } else if (type->is_list() || type->is_set()) {
278
- t_type* etype;
279
- if (type->is_list()) {
280
- etype = ((t_list*)type)->get_elem_type();
281
- } else {
282
- etype = ((t_set*)type)->get_elem_type();
283
- }
284
-
285
- const vector<t_const_value*>& val = value->get_list();
286
- vector<t_const_value*>::const_iterator v_iter;
287
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
288
- string val = render_const_value(out, name, etype, *v_iter);
289
- indent(out) << name << ".Add(" << val << ");" << endl;
290
- }
291
- }
292
- }
293
-
294
- void t_csharp_generator::print_const_constructor(std::ofstream& out, std::vector<t_const*> consts) {
295
- indent(out) << "static Constants()" << endl;
296
- scope_up(out);
297
- vector<t_const*>::iterator c_iter;
298
- for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
299
- string name = (*c_iter)->get_name();
300
- t_type* type = (*c_iter)->get_type();
301
- t_const_value* value = (*c_iter)->get_value();
302
-
303
- print_const_def_value(out, name, type, value);
304
- }
305
- scope_down(out);
306
- }
307
-
308
-
309
- //it seems like all that methods that call this are using in_static to be the opposite of what it would imply
310
- bool t_csharp_generator::print_const_value(std::ofstream& out, string name, t_type* type, t_const_value* value, bool in_static, bool defval, bool needtype) {
311
- indent(out);
312
- bool need_static_construction = !in_static;
313
- if (!defval || needtype) {
314
- out <<
315
- (in_static ? "" : "public static ") <<
316
- type_name(type) << " ";
317
- }
318
- if (type->is_base_type()) {
319
- string v2 = render_const_value(out, name, type, value);
320
- out << name << " = " << v2 << ";" << endl;
321
- need_static_construction = false;
322
- } else if (type->is_enum()) {
323
- out << name << " = (" << type_name(type, false, true) << ")" << value->get_integer() << ";" << endl;
324
- need_static_construction = false;
325
- } else if (type->is_struct() || type->is_xception()) {
326
- out << name << " = new " << type_name(type) << "();" << endl;
327
- } else if (type->is_map()) {
328
- out << name << " = new " << type_name(type, true, true) << "();" << endl;
329
- } else if (type->is_list() || type->is_set()) {
330
- out << name << " = new " << type_name(type) << "();" << endl;
331
- }
332
-
333
- if (defval && !type->is_base_type() && !type->is_enum()) {
334
- print_const_def_value(out, name, type, value);
335
- }
336
-
337
- return need_static_construction;
338
- }
339
-
340
- std::string t_csharp_generator::render_const_value(ofstream& out, string name, t_type* type, t_const_value* value) {
341
- std::ostringstream render;
342
-
343
- if (type->is_base_type()) {
344
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
345
- switch (tbase) {
346
- case t_base_type::TYPE_STRING:
347
- render << '"' << get_escaped_string(value) << '"';
348
- break;
349
- case t_base_type::TYPE_BOOL:
350
- render << ((value->get_integer() > 0) ? "true" : "false");
351
- break;
352
- case t_base_type::TYPE_BYTE:
353
- case t_base_type::TYPE_I16:
354
- case t_base_type::TYPE_I32:
355
- case t_base_type::TYPE_I64:
356
- render << value->get_integer();
357
- break;
358
- case t_base_type::TYPE_DOUBLE:
359
- if (value->get_type() == t_const_value::CV_INTEGER) {
360
- render << value->get_integer();
361
- } else {
362
- render << value->get_double();
363
- }
364
- break;
365
- default:
366
- throw "compiler error: no const of base type " + tbase;
367
- }
368
- } else if (type->is_enum()) {
369
- render << "(" << type->get_name() << ")" << value->get_integer();
370
- } else {
371
- string t = tmp("tmp");
372
- print_const_value(out, t, type, value, true, true, true);
373
- render << t;
374
- }
375
-
376
- return render.str();
377
- }
378
-
379
- void t_csharp_generator::generate_struct(t_struct* tstruct) {
380
- generate_csharp_struct(tstruct, false);
381
- }
382
-
383
- void t_csharp_generator::generate_xception(t_struct* txception) {
384
- generate_csharp_struct(txception, true);
385
- }
386
-
387
- void t_csharp_generator::generate_csharp_struct(t_struct* tstruct, bool is_exception) {
388
- string f_struct_name = namespace_dir_ + "/" + (tstruct->get_name()) + ".cs";
389
- ofstream f_struct;
390
-
391
- f_struct.open(f_struct_name.c_str());
392
-
393
- f_struct <<
394
- autogen_comment() <<
395
- csharp_type_usings() <<
396
- csharp_thrift_usings();
397
-
398
- generate_csharp_struct_definition(f_struct, tstruct, is_exception);
399
-
400
- f_struct.close();
401
- }
402
-
403
- void t_csharp_generator::generate_csharp_struct_definition(ofstream &out, t_struct* tstruct, bool is_exception, bool in_class, bool is_result) {
404
-
405
- if (!in_class) {
406
- start_csharp_namespace(out);
407
- }
408
-
409
- out << endl;
410
- indent(out) << "[Serializable]" << endl;
411
- bool is_final = (tstruct->annotations_.find("final") != tstruct->annotations_.end());
412
-
413
- indent(out) << "public " << (is_final ? "sealed " : "") << "partial class " << tstruct->get_name() << " : ";
414
-
415
- if (is_exception) {
416
- out << "Exception, ";
417
- }
418
- out << "TBase";
419
-
420
- out << endl;
421
-
422
- scope_up(out);
423
-
424
- const vector<t_field*>& members = tstruct->get_members();
425
- vector<t_field*>::const_iterator m_iter;
426
-
427
- //make private members with public Properties
428
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
429
- indent(out) <<
430
- "private " << declare_field(*m_iter, false) << endl;
431
- }
432
- out << endl;
433
-
434
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
435
- generate_property(out, *m_iter, true);
436
- }
437
-
438
- if (members.size() > 0) {
439
- out <<
440
- endl <<
441
- indent() << "public Isset __isset;" << endl <<
442
- indent() << "[Serializable]" << endl <<
443
- indent() << "public struct Isset {" << endl;
444
- indent_up();
445
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
446
- indent(out) <<
447
- "public bool " << (*m_iter)->get_name() << ";" << endl;
448
- }
449
-
450
- indent_down();
451
- indent(out) << "}" << endl << endl;
452
- }
453
-
454
- indent(out) <<
455
- "public " << tstruct->get_name() << "() {" << endl;
456
- indent_up();
457
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
458
- t_type* t = (*m_iter)->get_type();
459
- while (t->is_typedef()) {
460
- t = ((t_typedef*)t)->get_type();
461
- }
462
- if ((*m_iter)->get_value() != NULL) {
463
- print_const_value(out, "this." + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true, true);
464
- }
465
- }
466
-
467
- indent_down();
468
- indent(out) << "}" << endl << endl;
469
-
470
- generate_csharp_struct_reader(out, tstruct);
471
- if (is_result) {
472
- generate_csharp_struct_result_writer(out, tstruct);
473
- } else {
474
- generate_csharp_struct_writer(out, tstruct);
475
- }
476
- generate_csharp_struct_tostring(out, tstruct);
477
- scope_down(out);
478
- out << endl;
479
-
480
- if (!in_class)
481
- {
482
- end_csharp_namespace(out);
483
- }
484
- }
485
-
486
- void t_csharp_generator::generate_csharp_struct_reader(ofstream& out, t_struct* tstruct) {
487
- indent(out) <<
488
- "public void Read (TProtocol iprot)" << endl;
489
- scope_up(out);
490
-
491
- const vector<t_field*>& fields = tstruct->get_members();
492
- vector<t_field*>::const_iterator f_iter;
493
-
494
- indent(out) <<
495
- "TField field;" << endl <<
496
- indent() << "iprot.ReadStructBegin();" << endl;
497
-
498
- indent(out) <<
499
- "while (true)" << endl;
500
- scope_up(out);
501
-
502
- indent(out) <<
503
- "field = iprot.ReadFieldBegin();" << endl;
504
-
505
- indent(out) <<
506
- "if (field.Type == TType.Stop) { " << endl;
507
- indent_up();
508
- indent(out) <<
509
- "break;" << endl;
510
- indent_down();
511
- indent(out) <<
512
- "}" << endl;
513
-
514
- indent(out) <<
515
- "switch (field.ID)" << endl;
516
-
517
- scope_up(out);
518
-
519
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
520
- indent(out) <<
521
- "case " << (*f_iter)->get_key() << ":" << endl;
522
- indent_up();
523
- indent(out) <<
524
- "if (field.Type == " << type_to_enum((*f_iter)->get_type()) << ") {" << endl;
525
- indent_up();
526
-
527
- generate_deserialize_field(out, *f_iter, "this.");
528
- indent(out) <<
529
- "this.__isset." << (*f_iter)->get_name() << " = true;" << endl;
530
- indent_down();
531
- out <<
532
- indent() << "} else { " << endl <<
533
- indent() << " TProtocolUtil.Skip(iprot, field.Type);" << endl <<
534
- indent() << "}" << endl <<
535
- indent() << "break;" << endl;
536
- indent_down();
537
- }
538
-
539
- indent(out) <<
540
- "default: " << endl;
541
- indent_up();
542
- indent(out) << "TProtocolUtil.Skip(iprot, field.Type);" << endl;
543
- indent(out) << "break;" << endl;
544
- indent_down();
545
-
546
- scope_down(out);
547
-
548
- indent(out) <<
549
- "iprot.ReadFieldEnd();" << endl;
550
-
551
- scope_down(out);
552
-
553
- indent(out) <<
554
- "iprot.ReadStructEnd();" << endl;
555
-
556
- indent_down();
557
-
558
- indent(out) << "}" << endl << endl;
559
-
560
- }
561
-
562
- void t_csharp_generator::generate_csharp_struct_writer(ofstream& out, t_struct* tstruct) {
563
- out <<
564
- indent() << "public void Write(TProtocol oprot) {" << endl;
565
- indent_up();
566
-
567
- string name = tstruct->get_name();
568
- const vector<t_field*>& fields = tstruct->get_sorted_members();
569
- vector<t_field*>::const_iterator f_iter;
570
-
571
- indent(out) <<
572
- "TStruct struc = new TStruct(\"" << name << "\");" << endl;
573
- indent(out) <<
574
- "oprot.WriteStructBegin(struc);" << endl;
575
-
576
- if (fields.size() > 0) {
577
- indent(out) << "TField field = new TField();" << endl;
578
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
579
- bool null_allowed = type_can_be_null((*f_iter)->get_type());
580
- if (null_allowed) {
581
- indent(out) <<
582
- "if (this." << (*f_iter)->get_name() << " != null && __isset." << (*f_iter)->get_name() << ") {" << endl;
583
- indent_up();
584
- }
585
- else
586
- {
587
- indent(out) <<
588
- "if (__isset." << (*f_iter)->get_name() << ") {" << endl;
589
- indent_up();
590
- }
591
-
592
- indent(out) <<
593
- "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
594
- indent(out) <<
595
- "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
596
- indent(out) <<
597
- "field.ID = " << (*f_iter)->get_key() << ";" << endl;
598
- indent(out) <<
599
- "oprot.WriteFieldBegin(field);" << endl;
600
-
601
- generate_serialize_field(out, *f_iter, "this.");
602
-
603
- indent(out) <<
604
- "oprot.WriteFieldEnd();" << endl;
605
-
606
- indent_down();
607
- indent(out) << "}" << endl;
608
- }
609
- }
610
-
611
- indent(out) <<
612
- "oprot.WriteFieldStop();" << endl;
613
- indent(out) <<
614
- "oprot.WriteStructEnd();" << endl;
615
-
616
- indent_down();
617
-
618
- indent(out) <<
619
- "}" << endl << endl;
620
- }
621
-
622
- void t_csharp_generator::generate_csharp_struct_result_writer(ofstream& out, t_struct* tstruct) {
623
- indent(out) <<
624
- "public void Write(TProtocol oprot) {" << endl;
625
- indent_up();
626
-
627
- string name = tstruct->get_name();
628
- const vector<t_field*>& fields = tstruct->get_sorted_members();
629
- vector<t_field*>::const_iterator f_iter;
630
-
631
- indent(out) <<
632
- "TStruct struc = new TStruct(\"" << name << "\");" << endl;
633
- indent(out) <<
634
- "oprot.WriteStructBegin(struc);" << endl;
635
-
636
- if (fields.size() > 0) {
637
- indent(out) << "TField field = new TField();" << endl;
638
- bool first = true;
639
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
640
- if (first) {
641
- first = false;
642
- out <<
643
- endl << indent() << "if ";
644
- } else {
645
- out <<
646
- " else if ";
647
- }
648
-
649
- out <<
650
- "(this.__isset." << (*f_iter)->get_name() << ") {" << endl;
651
- indent_up();
652
-
653
- bool null_allowed = type_can_be_null((*f_iter)->get_type());
654
- if (null_allowed) {
655
- indent(out) <<
656
- "if (this." << (*f_iter)->get_name() << " != null) {" << endl;
657
- indent_up();
658
- }
659
-
660
- indent(out) <<
661
- "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
662
- indent(out) <<
663
- "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
664
- indent(out) <<
665
- "field.ID = " << (*f_iter)->get_key() << ";" << endl;
666
- indent(out) <<
667
- "oprot.WriteFieldBegin(field);" << endl;
668
-
669
- generate_serialize_field(out, *f_iter, "this.");
670
-
671
- indent(out) <<
672
- "oprot.WriteFieldEnd();" << endl;
673
-
674
- if (null_allowed) {
675
- indent_down();
676
- indent(out) << "}" << endl;
677
- }
678
-
679
- indent_down();
680
- indent(out) << "}";
681
- }
682
- }
683
-
684
- out <<
685
- endl <<
686
- indent() << "oprot.WriteFieldStop();" << endl <<
687
- indent() << "oprot.WriteStructEnd();" << endl;
688
-
689
- indent_down();
690
-
691
- indent(out) <<
692
- "}" << endl << endl;
693
- }
694
-
695
- void t_csharp_generator::generate_csharp_struct_tostring(ofstream& out, t_struct* tstruct) {
696
- indent(out) <<
697
- "public override string ToString() {" << endl;
698
- indent_up();
699
-
700
- indent(out) <<
701
- "StringBuilder sb = new StringBuilder(\"" << tstruct->get_name() << "(\");" << endl;
702
-
703
- const vector<t_field*>& fields = tstruct->get_members();
704
- vector<t_field*>::const_iterator f_iter;
705
-
706
- bool first = true;
707
-
708
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
709
- if (first) {
710
- first = false;
711
- indent(out) <<
712
- "sb.Append(\"" << (*f_iter)->get_name() << ": \");" << endl;
713
- } else {
714
- indent(out) <<
715
- "sb.Append(\"," << (*f_iter)->get_name() << ": \");" << endl;
716
- }
717
- t_type* ttype = (*f_iter)->get_type();
718
- if (ttype->is_xception() || ttype->is_struct()) {
719
- indent(out) <<
720
- "sb.Append(this." << (*f_iter)->get_name() << "== null ? \"<null>\" : "<< "this." << (*f_iter)->get_name() << ".ToString());" << endl;
721
- } else {
722
- indent(out) <<
723
- "sb.Append(this." << (*f_iter)->get_name() << ");" << endl;
724
- }
725
- }
726
-
727
- indent(out) <<
728
- "sb.Append(\")\");" << endl;
729
- indent(out) <<
730
- "return sb.ToString();" << endl;
731
-
732
- indent_down();
733
- indent(out) << "}" << endl << endl;
734
- }
735
-
736
- void t_csharp_generator::generate_service(t_service* tservice) {
737
- string f_service_name = namespace_dir_ + "/" + service_name_ + ".cs";
738
- f_service_.open(f_service_name.c_str());
739
-
740
- f_service_ <<
741
- autogen_comment() <<
742
- csharp_type_usings() <<
743
- csharp_thrift_usings();
744
-
745
- start_csharp_namespace(f_service_);
746
-
747
- indent(f_service_) <<
748
- "public class " << service_name_ << " {" << endl;
749
- indent_up();
750
-
751
- generate_service_interface(tservice);
752
- generate_service_client(tservice);
753
- generate_service_server(tservice);
754
- generate_service_helpers(tservice);
755
-
756
- indent_down();
757
-
758
- indent(f_service_) <<
759
- "}" << endl;
760
- end_csharp_namespace(f_service_);
761
- f_service_.close();
762
- }
763
-
764
- void t_csharp_generator::generate_service_interface(t_service* tservice) {
765
- string extends = "";
766
- string extends_iface = "";
767
- if (tservice->get_extends() != NULL) {
768
- extends = type_name(tservice->get_extends());
769
- extends_iface = " : " + extends + ".Iface";
770
- }
771
-
772
- indent(f_service_) <<
773
- "public interface Iface" << extends_iface << " {" << endl;
774
- indent_up();
775
- vector<t_function*> functions = tservice->get_functions();
776
- vector<t_function*>::iterator f_iter;
777
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter)
778
- {
779
- indent(f_service_) <<
780
- function_signature(*f_iter) << ";" << endl;
781
- }
782
- indent_down();
783
- f_service_ <<
784
- indent() << "}" << endl << endl;
785
- }
786
-
787
- void t_csharp_generator::generate_service_helpers(t_service* tservice) {
788
- vector<t_function*> functions = tservice->get_functions();
789
- vector<t_function*>::iterator f_iter;
790
-
791
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
792
- t_struct* ts = (*f_iter)->get_arglist();
793
- generate_csharp_struct_definition(f_service_, ts, false, true);
794
- generate_function_helpers(*f_iter);
795
- }
796
- }
797
-
798
- void t_csharp_generator::generate_service_client(t_service* tservice) {
799
- string extends = "";
800
- string extends_client = "";
801
- if (tservice->get_extends() != NULL) {
802
- extends = type_name(tservice->get_extends());
803
- extends_client = extends + ".Client, ";
804
- }
805
-
806
- indent(f_service_) <<
807
- "public class Client : " << extends_client << "Iface {" << endl;
808
- indent_up();
809
- indent(f_service_) <<
810
- "public Client(TProtocol prot) : this(prot, prot)" << endl;
811
- scope_up(f_service_);
812
- scope_down(f_service_);
813
- f_service_ << endl;
814
-
815
- indent(f_service_) <<
816
- "public Client(TProtocol iprot, TProtocol oprot)";
817
- if (!extends.empty()) {
818
- f_service_ << " : base(iprot, oprot)";
819
- }
820
- f_service_ << endl;
821
-
822
- scope_up(f_service_);
823
- if (extends.empty()) {
824
- f_service_ <<
825
- indent() << "iprot_ = iprot;" << endl <<
826
- indent() << "oprot_ = oprot;" << endl;
827
- }
828
- scope_down(f_service_);
829
-
830
- f_service_ << endl;
831
-
832
- if (extends.empty()) {
833
- f_service_ <<
834
- indent() << "protected TProtocol iprot_;" << endl <<
835
- indent() << "protected TProtocol oprot_;" << endl <<
836
- indent() << "protected int seqid_;" << endl << endl;
837
-
838
- f_service_ << indent() << "public TProtocol InputProtocol" << endl;
839
- scope_up(f_service_);
840
- indent(f_service_) << "get { return iprot_; }" << endl;
841
- scope_down(f_service_);
842
-
843
- f_service_ << indent() << "public TProtocol OutputProtocol" << endl;
844
- scope_up(f_service_);
845
- indent(f_service_) << "get { return oprot_; }" << endl;
846
- scope_down(f_service_);
847
- f_service_ << endl << endl;
848
- }
849
-
850
- vector<t_function*> functions = tservice->get_functions();
851
- vector<t_function*>::const_iterator f_iter;
852
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
853
- string funname = (*f_iter)->get_name();
854
-
855
- indent(f_service_) <<
856
- "public " << function_signature(*f_iter) << endl;
857
- scope_up(f_service_);
858
- indent(f_service_) <<
859
- "send_" << funname << "(";
860
-
861
- t_struct* arg_struct = (*f_iter)->get_arglist();
862
-
863
- const vector<t_field*>& fields = arg_struct->get_members();
864
- vector<t_field*>::const_iterator fld_iter;
865
- bool first = true;
866
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
867
- if (first) {
868
- first = false;
869
- } else {
870
- f_service_ << ", ";
871
- }
872
- f_service_ << (*fld_iter)->get_name();
873
- }
874
- f_service_ << ");" << endl;
875
-
876
- if (!(*f_iter)->is_oneway()) {
877
- f_service_ << indent();
878
- if (!(*f_iter)->get_returntype()->is_void()) {
879
- f_service_ << "return ";
880
- }
881
- f_service_ <<
882
- "recv_" << funname << "();" << endl;
883
- }
884
- scope_down(f_service_);
885
- f_service_ << endl;
886
-
887
- t_function send_function(g_type_void,
888
- string("send_") + (*f_iter)->get_name(),
889
- (*f_iter)->get_arglist());
890
-
891
- string argsname = (*f_iter)->get_name() + "_args";
892
-
893
- indent(f_service_) <<
894
- "public " << function_signature(&send_function) << endl;
895
- scope_up(f_service_);
896
-
897
- f_service_ <<
898
- indent() << "oprot_.WriteMessageBegin(new TMessage(\"" << funname << "\", TMessageType.Call, seqid_));" << endl <<
899
- indent() << argsname << " args = new " << argsname << "();" << endl;
900
-
901
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
902
- f_service_ <<
903
- indent() << "args." << prop_name(*fld_iter) << " = " << (*fld_iter)->get_name() << ";" << endl;
904
- }
905
-
906
- f_service_ <<
907
- indent() << "args.Write(oprot_);" << endl <<
908
- indent() << "oprot_.WriteMessageEnd();" << endl <<
909
- indent() << "oprot_.Transport.Flush();" << endl;
910
-
911
- scope_down(f_service_);
912
- f_service_ << endl;
913
-
914
- if (!(*f_iter)->is_oneway()) {
915
- string resultname = (*f_iter)->get_name() + "_result";
916
-
917
- t_struct noargs(program_);
918
- t_function recv_function((*f_iter)->get_returntype(),
919
- string("recv_") + (*f_iter)->get_name(),
920
- &noargs,
921
- (*f_iter)->get_xceptions());
922
- indent(f_service_) <<
923
- "public " << function_signature(&recv_function) << endl;
924
- scope_up(f_service_);
925
-
926
- f_service_ <<
927
- indent() << "TMessage msg = iprot_.ReadMessageBegin();" << endl <<
928
- indent() << "if (msg.Type == TMessageType.Exception) {" << endl;
929
- indent_up();
930
- f_service_ <<
931
- indent() << "TApplicationException x = TApplicationException.Read(iprot_);" << endl <<
932
- indent() << "iprot_.ReadMessageEnd();" << endl <<
933
- indent() << "throw x;" << endl;
934
- indent_down();
935
- f_service_ <<
936
- indent() << "}" << endl <<
937
- indent() << resultname << " result = new " << resultname << "();" << endl <<
938
- indent() << "result.Read(iprot_);" << endl <<
939
- indent() << "iprot_.ReadMessageEnd();" << endl;
940
-
941
- if (!(*f_iter)->get_returntype()->is_void()) {
942
- f_service_ <<
943
- indent() << "if (result.__isset.success) {" << endl <<
944
- indent() << " return result.Success;" << endl <<
945
- indent() << "}" << endl;
946
- }
947
-
948
- t_struct *xs = (*f_iter)->get_xceptions();
949
-
950
- const std::vector<t_field*>& xceptions = xs->get_members();
951
- vector<t_field*>::const_iterator x_iter;
952
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
953
- f_service_ <<
954
- indent() << "if (result.__isset." << (*x_iter)->get_name() << ") {" << endl <<
955
- indent() << " throw result." << prop_name(*x_iter) << ";" << endl <<
956
- indent() << "}" << endl;
957
- }
958
-
959
- if ((*f_iter)->get_returntype()->is_void()) {
960
- indent(f_service_) <<
961
- "return;" << endl;
962
- } else {
963
- f_service_ <<
964
- indent() << "throw new TApplicationException(TApplicationException.ExceptionType.MissingResult, \"" << (*f_iter)->get_name() << " failed: unknown result\");" << endl;
965
- }
966
-
967
- scope_down(f_service_);
968
- f_service_ << endl;
969
- }
970
- }
971
-
972
- indent_down();
973
- indent(f_service_) <<
974
- "}" << endl;
975
- }
976
-
977
- void t_csharp_generator::generate_service_server(t_service* tservice) {
978
- vector<t_function*> functions = tservice->get_functions();
979
- vector<t_function*>::iterator f_iter;
980
-
981
- string extends = "";
982
- string extends_processor = "";
983
- if (tservice->get_extends() != NULL) {
984
- extends = type_name(tservice->get_extends());
985
- extends_processor = extends + ".Processor, ";
986
- }
987
-
988
- indent(f_service_) <<
989
- "public class Processor : " << extends_processor << "TProcessor {" << endl;
990
- indent_up();
991
-
992
- indent(f_service_) <<
993
- "public Processor(Iface iface)" ;
994
- if (!extends.empty()) {
995
- f_service_ << " : base(iface)";
996
- }
997
- f_service_ << endl;
998
- scope_up(f_service_);
999
- f_service_ <<
1000
- indent() << "iface_ = iface;" << endl;
1001
-
1002
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
1003
- f_service_ <<
1004
- indent() << "processMap_[\"" << (*f_iter)->get_name() << "\"] = " << (*f_iter)->get_name() << "_Process;" << endl;
1005
- }
1006
-
1007
- scope_down(f_service_);
1008
- f_service_ << endl;
1009
-
1010
- if (extends.empty()) {
1011
- f_service_ <<
1012
- indent() << "protected delegate void ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot);" << endl;
1013
- }
1014
-
1015
- f_service_ <<
1016
- indent() << "private Iface iface_;" << endl;
1017
-
1018
- if (extends.empty()) {
1019
- f_service_ <<
1020
- indent() << "protected Dictionary<string, ProcessFunction> processMap_ = new Dictionary<string, ProcessFunction>();" << endl;
1021
- }
1022
-
1023
- f_service_ << endl;
1024
-
1025
- if (extends.empty()) {
1026
- indent(f_service_) <<
1027
- "public bool Process(TProtocol iprot, TProtocol oprot)" << endl;
1028
- }
1029
- else
1030
- {
1031
- indent(f_service_) <<
1032
- "public new bool Process(TProtocol iprot, TProtocol oprot)" << endl;
1033
- }
1034
- scope_up(f_service_);
1035
-
1036
- f_service_ << indent() << "try" << endl;
1037
- scope_up(f_service_);
1038
-
1039
- f_service_ <<
1040
- indent() << "TMessage msg = iprot.ReadMessageBegin();" << endl;
1041
-
1042
- f_service_ <<
1043
- indent() << "ProcessFunction fn;" << endl <<
1044
- indent() << "processMap_.TryGetValue(msg.Name, out fn);" << endl <<
1045
- indent() << "if (fn == null) {" << endl <<
1046
- indent() << " TProtocolUtil.Skip(iprot, TType.Struct);" << endl <<
1047
- indent() << " iprot.ReadMessageEnd();" << endl <<
1048
- indent() << " TApplicationException x = new TApplicationException (TApplicationException.ExceptionType.UnknownMethod, \"Invalid method name: '\" + msg.Name + \"'\");" << endl <<
1049
- indent() << " oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));" << endl <<
1050
- indent() << " x.Write(oprot);" << endl <<
1051
- indent() << " oprot.WriteMessageEnd();" << endl <<
1052
- indent() << " oprot.Transport.Flush();" << endl <<
1053
- indent() << " return true;" << endl <<
1054
- indent() << "}" << endl <<
1055
- indent() << "fn(msg.SeqID, iprot, oprot);" << endl;
1056
-
1057
- scope_down(f_service_);
1058
-
1059
- f_service_ <<
1060
- indent() << "catch (IOException)" << endl;
1061
- scope_up(f_service_);
1062
- f_service_ <<
1063
- indent() << "return false;" << endl;
1064
- scope_down(f_service_);
1065
-
1066
- f_service_ <<
1067
- indent() << "return true;" << endl;
1068
-
1069
- scope_down(f_service_);
1070
- f_service_ << endl;
1071
-
1072
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter)
1073
- {
1074
- generate_process_function(tservice, *f_iter);
1075
- }
1076
-
1077
- indent_down();
1078
- indent(f_service_) <<
1079
- "}" << endl << endl;
1080
- }
1081
-
1082
- void t_csharp_generator::generate_function_helpers(t_function* tfunction) {
1083
- if (tfunction->is_oneway()) {
1084
- return;
1085
- }
1086
-
1087
- t_struct result(program_, tfunction->get_name() + "_result");
1088
- t_field success(tfunction->get_returntype(), "success", 0);
1089
- if (!tfunction->get_returntype()->is_void()) {
1090
- result.append(&success);
1091
- }
1092
-
1093
- t_struct *xs = tfunction->get_xceptions();
1094
- const vector<t_field*>& fields = xs->get_members();
1095
- vector<t_field*>::const_iterator f_iter;
1096
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
1097
- result.append(*f_iter);
1098
- }
1099
-
1100
- generate_csharp_struct_definition(f_service_, &result, false, true, true);
1101
- }
1102
-
1103
- void t_csharp_generator::generate_process_function(t_service* tservice, t_function* tfunction) {
1104
- indent(f_service_) <<
1105
- "public void " << tfunction->get_name() << "_Process(int seqid, TProtocol iprot, TProtocol oprot)" << endl;
1106
- scope_up(f_service_);
1107
-
1108
- string argsname = tfunction->get_name() + "_args";
1109
- string resultname = tfunction->get_name() + "_result";
1110
-
1111
- f_service_ <<
1112
- indent() << argsname << " args = new " << argsname << "();" << endl <<
1113
- indent() << "args.Read(iprot);" << endl <<
1114
- indent() << "iprot.ReadMessageEnd();" << endl;
1115
-
1116
- t_struct* xs = tfunction->get_xceptions();
1117
- const std::vector<t_field*>& xceptions = xs->get_members();
1118
- vector<t_field*>::const_iterator x_iter;
1119
-
1120
- if (!tfunction->is_oneway()) {
1121
- f_service_ <<
1122
- indent() << resultname << " result = new " << resultname << "();" << endl;
1123
- }
1124
-
1125
- if (xceptions.size() > 0) {
1126
- f_service_ <<
1127
- indent() << "try {" << endl;
1128
- indent_up();
1129
- }
1130
-
1131
- t_struct* arg_struct = tfunction->get_arglist();
1132
- const std::vector<t_field*>& fields = arg_struct->get_members();
1133
- vector<t_field*>::const_iterator f_iter;
1134
-
1135
- f_service_ << indent();
1136
- if (!tfunction->is_oneway() && !tfunction->get_returntype()->is_void()) {
1137
- f_service_ << "result.Success = ";
1138
- }
1139
- f_service_ <<
1140
- "iface_." << tfunction->get_name() << "(";
1141
- bool first = true;
1142
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
1143
- if (first) {
1144
- first = false;
1145
- } else {
1146
- f_service_ << ", ";
1147
- }
1148
- f_service_ << "args." << prop_name(*f_iter);
1149
- }
1150
- f_service_ << ");" << endl;
1151
-
1152
- if (!tfunction->is_oneway() && xceptions.size() > 0) {
1153
- indent_down();
1154
- f_service_ << indent() << "}";
1155
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
1156
- f_service_ << " catch (" << type_name((*x_iter)->get_type(), false, false) << " " << (*x_iter)->get_name() << ") {" << endl;
1157
- if (!tfunction->is_oneway()) {
1158
- indent_up();
1159
- f_service_ <<
1160
- indent() << "result." << prop_name(*x_iter) << " = " << (*x_iter)->get_name() << ";" << endl;
1161
- indent_down();
1162
- f_service_ << indent() << "}";
1163
- } else {
1164
- f_service_ << "}";
1165
- }
1166
- }
1167
- f_service_ << endl;
1168
- }
1169
-
1170
- if (tfunction->is_oneway()) {
1171
- f_service_ <<
1172
- indent() << "return;" << endl;
1173
- scope_down(f_service_);
1174
-
1175
- return;
1176
- }
1177
-
1178
- f_service_ <<
1179
- indent() << "oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name() << "\", TMessageType.Reply, seqid)); " << endl <<
1180
- indent() << "result.Write(oprot);" << endl <<
1181
- indent() << "oprot.WriteMessageEnd();" << endl <<
1182
- indent() << "oprot.Transport.Flush();" << endl;
1183
-
1184
- scope_down(f_service_);
1185
-
1186
- f_service_ << endl;
1187
- }
1188
-
1189
- void t_csharp_generator::generate_deserialize_field(ofstream& out, t_field* tfield, string prefix) {
1190
- t_type* type = tfield->get_type();
1191
- while(type->is_typedef()) {
1192
- type = ((t_typedef*)type)->get_type();
1193
- }
1194
-
1195
- if (type->is_void()) {
1196
- throw "CANNOT GENERATE DESERIALIZE CODE FOR void TYPE: " + prefix + tfield->get_name();
1197
- }
1198
-
1199
- string name = prefix + tfield->get_name();
1200
-
1201
- if (type->is_struct() || type->is_xception()) {
1202
- generate_deserialize_struct(out, (t_struct*)type, name);
1203
- } else if (type->is_container()) {
1204
- generate_deserialize_container(out, type, name);
1205
- } else if (type->is_base_type() || type->is_enum()) {
1206
- indent(out) <<
1207
- name << " = ";
1208
-
1209
- if (type->is_enum())
1210
- {
1211
- out << "(" << type_name(type, false, true) << ")";
1212
- }
1213
-
1214
- out << "iprot.";
1215
-
1216
- if (type->is_base_type()) {
1217
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
1218
- switch (tbase) {
1219
- case t_base_type::TYPE_VOID:
1220
- throw "compiler error: cannot serialize void field in a struct: " + name;
1221
- break;
1222
- case t_base_type::TYPE_STRING:
1223
- if (((t_base_type*)type)->is_binary()) {
1224
- out << "ReadBinary();";
1225
- } else {
1226
- out << "ReadString();";
1227
- }
1228
- break;
1229
- case t_base_type::TYPE_BOOL:
1230
- out << "ReadBool();";
1231
- break;
1232
- case t_base_type::TYPE_BYTE:
1233
- out << "ReadByte();";
1234
- break;
1235
- case t_base_type::TYPE_I16:
1236
- out << "ReadI16();";
1237
- break;
1238
- case t_base_type::TYPE_I32:
1239
- out << "ReadI32();";
1240
- break;
1241
- case t_base_type::TYPE_I64:
1242
- out << "ReadI64();";
1243
- break;
1244
- case t_base_type::TYPE_DOUBLE:
1245
- out << "ReadDouble();";
1246
- break;
1247
- default:
1248
- throw "compiler error: no C# name for base type " + tbase;
1249
- }
1250
- } else if (type->is_enum()) {
1251
- out << "ReadI32();";
1252
- }
1253
- out << endl;
1254
- } else {
1255
- printf("DO NOT KNOW HOW TO DESERIALIZE FIELD '%s' TYPE '%s'\n", tfield->get_name().c_str(), type_name(type).c_str());
1256
- }
1257
- }
1258
-
1259
- void t_csharp_generator::generate_deserialize_struct(ofstream& out, t_struct* tstruct, string prefix) {
1260
- out <<
1261
- indent() << prefix << " = new " << type_name(tstruct) << "();" << endl <<
1262
- indent() << prefix << ".Read(iprot);" << endl;
1263
- }
1264
-
1265
- void t_csharp_generator::generate_deserialize_container(ofstream& out, t_type* ttype, string prefix) {
1266
- scope_up(out);
1267
-
1268
- string obj;
1269
-
1270
- if (ttype->is_map()) {
1271
- obj = tmp("_map");
1272
- } else if (ttype->is_set()) {
1273
- obj = tmp("_set");
1274
- } else if (ttype->is_list()) {
1275
- obj = tmp("_list");
1276
- }
1277
-
1278
- indent(out) <<
1279
- prefix << " = new " << type_name(ttype, false, true) << "();" <<endl;
1280
- if (ttype->is_map()) {
1281
- out <<
1282
- indent() << "TMap " << obj << " = iprot.ReadMapBegin();" << endl;
1283
- } else if (ttype->is_set()) {
1284
- out <<
1285
- indent() << "TSet " << obj << " = iprot.ReadSetBegin();" << endl;
1286
- } else if (ttype->is_list()) {
1287
- out <<
1288
- indent() << "TList " << obj << " = iprot.ReadListBegin();" << endl;
1289
- }
1290
-
1291
- string i = tmp("_i");
1292
- indent(out) <<
1293
- "for( int " << i << " = 0; " << i << " < " << obj << ".Count" << "; " << "++" << i << ")" << endl;
1294
- scope_up(out);
1295
-
1296
- if (ttype->is_map()) {
1297
- generate_deserialize_map_element(out, (t_map*)ttype, prefix);
1298
- } else if (ttype->is_set()) {
1299
- generate_deserialize_set_element(out, (t_set*)ttype, prefix);
1300
- } else if (ttype->is_list()) {
1301
- generate_deserialize_list_element(out, (t_list*)ttype, prefix);
1302
- }
1303
-
1304
- scope_down(out);
1305
-
1306
- if (ttype->is_map()) {
1307
- indent(out) << "iprot.ReadMapEnd();" << endl;
1308
- } else if (ttype->is_set()) {
1309
- indent(out) << "iprot.ReadSetEnd();" << endl;
1310
- } else if (ttype->is_list()) {
1311
- indent(out) << "iprot.ReadListEnd();" << endl;
1312
- }
1313
-
1314
- scope_down(out);
1315
- }
1316
-
1317
- void t_csharp_generator::generate_deserialize_map_element(ofstream& out, t_map* tmap, string prefix) {
1318
- string key = tmp("_key");
1319
- string val = tmp("_val");
1320
-
1321
- t_field fkey(tmap->get_key_type(), key);
1322
- t_field fval(tmap->get_val_type(), val);
1323
-
1324
- indent(out) <<
1325
- declare_field(&fkey) << endl;
1326
- indent(out) <<
1327
- declare_field(&fval) << endl;
1328
-
1329
- generate_deserialize_field(out, &fkey);
1330
- generate_deserialize_field(out, &fval);
1331
-
1332
- indent(out) <<
1333
- prefix << "[" << key << "] = " << val << ";" << endl;
1334
- }
1335
-
1336
- void t_csharp_generator::generate_deserialize_set_element(ofstream& out, t_set* tset, string prefix) {
1337
- string elem = tmp("_elem");
1338
- t_field felem(tset->get_elem_type(), elem);
1339
-
1340
- indent(out) <<
1341
- declare_field(&felem, true) << endl;
1342
-
1343
- generate_deserialize_field(out, &felem);
1344
-
1345
- indent(out) <<
1346
- prefix << ".Add(" << elem << ");" << endl;
1347
- }
1348
-
1349
- void t_csharp_generator::generate_deserialize_list_element(ofstream& out, t_list* tlist, string prefix) {
1350
- string elem = tmp("_elem");
1351
- t_field felem(tlist->get_elem_type(), elem);
1352
-
1353
- indent(out) <<
1354
- declare_field(&felem, true) << endl;
1355
-
1356
- generate_deserialize_field(out, &felem);
1357
-
1358
- indent(out) <<
1359
- prefix << ".Add(" << elem << ");" << endl;
1360
- }
1361
-
1362
- void t_csharp_generator::generate_serialize_field(ofstream& out, t_field* tfield, string prefix) {
1363
- t_type* type = tfield->get_type();
1364
- while (type->is_typedef()) {
1365
- type = ((t_typedef*)type)->get_type();
1366
- }
1367
-
1368
- if (type->is_void()) {
1369
- throw "CANNOT GENERATE SERIALIZE CODE FOR void TYPE: " + prefix + tfield->get_name();
1370
- }
1371
-
1372
- if (type->is_struct() || type->is_xception()) {
1373
- generate_serialize_struct(out, (t_struct*)type, prefix + tfield->get_name());
1374
- } else if (type->is_container()) {
1375
- generate_serialize_container(out, type, prefix + tfield->get_name());
1376
- } else if (type->is_base_type() || type->is_enum()) {
1377
- string name = prefix + tfield->get_name();
1378
- indent(out) <<
1379
- "oprot.";
1380
-
1381
- if (type->is_base_type()) {
1382
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
1383
-
1384
- switch(tbase) {
1385
- case t_base_type::TYPE_VOID:
1386
- throw "compiler error: cannot serialize void field in a struct: " + name;
1387
- break;
1388
- case t_base_type::TYPE_STRING:
1389
- if (((t_base_type*)type)->is_binary()) {
1390
- out << "WriteBinary(";
1391
- } else {
1392
- out << "WriteString(";
1393
- }
1394
- out << name << ");";
1395
- break;
1396
- case t_base_type::TYPE_BOOL:
1397
- out << "WriteBool(" << name << ");";
1398
- break;
1399
- case t_base_type::TYPE_BYTE:
1400
- out << "WriteByte(" << name << ");";
1401
- break;
1402
- case t_base_type::TYPE_I16:
1403
- out << "WriteI16(" << name << ");";
1404
- break;
1405
- case t_base_type::TYPE_I32:
1406
- out << "WriteI32(" << name << ");";
1407
- break;
1408
- case t_base_type::TYPE_I64:
1409
- out << "WriteI64(" << name << ");";
1410
- break;
1411
- case t_base_type::TYPE_DOUBLE:
1412
- out << "WriteDouble(" << name << ");";
1413
- break;
1414
- default:
1415
- throw "compiler error: no C# name for base type " + tbase;
1416
- }
1417
- } else if (type->is_enum()) {
1418
- out << "WriteI32((int)" << name << ");";
1419
- }
1420
- out << endl;
1421
- } else {
1422
- printf("DO NOT KNOW HOW TO SERIALIZE '%s%s' TYPE '%s'\n",
1423
- prefix.c_str(),
1424
- tfield->get_name().c_str(),
1425
- type_name(type).c_str());
1426
- }
1427
- }
1428
-
1429
- void t_csharp_generator::generate_serialize_struct(ofstream& out, t_struct* tstruct, string prefix) {
1430
- out <<
1431
- indent() << prefix << ".Write(oprot);" << endl;
1432
- }
1433
-
1434
- void t_csharp_generator::generate_serialize_container(ofstream& out, t_type* ttype, string prefix) {
1435
- scope_up(out);
1436
-
1437
- if (ttype->is_map()) {
1438
- indent(out) <<
1439
- "oprot.WriteMapBegin(new TMap(" <<
1440
- type_to_enum(((t_map*)ttype)->get_key_type()) << ", " <<
1441
- type_to_enum(((t_map*)ttype)->get_val_type()) << ", " <<
1442
- prefix << ".Count));" << endl;
1443
- } else if (ttype->is_set()) {
1444
- indent(out) <<
1445
- "oprot.WriteSetBegin(new TSet(" <<
1446
- type_to_enum(((t_set*)ttype)->get_elem_type()) << ", " <<
1447
- prefix << ".Count));" << endl;
1448
- } else if (ttype->is_list()) {
1449
- indent(out) <<
1450
- "oprot.WriteListBegin(new TList(" <<
1451
- type_to_enum(((t_list*)ttype)->get_elem_type()) << ", " <<
1452
- prefix << ".Count));" << endl;
1453
- }
1454
-
1455
- string iter = tmp("_iter");
1456
- if (ttype->is_map()) {
1457
- indent(out) <<
1458
- "foreach (" <<
1459
- type_name(((t_map*)ttype)->get_key_type()) << " " << iter <<
1460
- " in " <<
1461
- prefix << ".Keys)";
1462
- } else if (ttype->is_set()) {
1463
- indent(out) <<
1464
- "foreach (" <<
1465
- type_name(((t_set*)ttype)->get_elem_type()) << " " << iter <<
1466
- " in " <<
1467
- prefix << ")";
1468
- } else if (ttype->is_list()) {
1469
- indent(out) <<
1470
- "foreach (" <<
1471
- type_name(((t_list*)ttype)->get_elem_type()) << " " << iter <<
1472
- " in " <<
1473
- prefix << ")";
1474
- }
1475
-
1476
- out << endl;
1477
- scope_up(out);
1478
-
1479
- if (ttype->is_map()) {
1480
- generate_serialize_map_element(out, (t_map*)ttype, iter, prefix);
1481
- } else if (ttype->is_set()) {
1482
- generate_serialize_set_element(out, (t_set*)ttype, iter);
1483
- } else if (ttype->is_list()) {
1484
- generate_serialize_list_element(out, (t_list*)ttype, iter);
1485
- }
1486
-
1487
- if (ttype->is_map()) {
1488
- indent(out) << "oprot.WriteMapEnd();" << endl;
1489
- } else if (ttype->is_set()) {
1490
- indent(out) << "oprot.WriteSetEnd();" << endl;
1491
- } else if (ttype->is_list()) {
1492
- indent(out) << "oprot.WriteListEnd();" << endl;
1493
- }
1494
-
1495
- scope_down(out);
1496
- scope_down(out);
1497
- }
1498
-
1499
- void t_csharp_generator::generate_serialize_map_element(ofstream& out, t_map* tmap, string iter, string map) {
1500
- t_field kfield(tmap->get_key_type(), iter);
1501
- generate_serialize_field(out, &kfield, "");
1502
- t_field vfield(tmap->get_val_type(), map + "[" + iter + "]");
1503
- generate_serialize_field(out, &vfield, "");
1504
- }
1505
-
1506
- void t_csharp_generator::generate_serialize_set_element(ofstream& out, t_set* tset, string iter) {
1507
- t_field efield(tset->get_elem_type(), iter);
1508
- generate_serialize_field(out, &efield, "");
1509
- }
1510
-
1511
- void t_csharp_generator::generate_serialize_list_element(ofstream& out, t_list* tlist, string iter) {
1512
- t_field efield(tlist->get_elem_type(), iter);
1513
- generate_serialize_field(out, &efield, "");
1514
- }
1515
-
1516
- void t_csharp_generator::generate_property(ofstream& out, t_field* tfield, bool isPublic) {
1517
- indent(out) << (isPublic ? "public " : "private ") << type_name(tfield->get_type())
1518
- << " " << prop_name(tfield) << endl;
1519
- scope_up(out);
1520
- indent(out) << "get" << endl;
1521
- scope_up(out);
1522
- indent(out) << "return " << tfield->get_name() << ";" << endl;
1523
- scope_down(out);
1524
- indent(out) << "set" << endl;
1525
- scope_up(out);
1526
- indent(out) << "__isset." << tfield->get_name() << " = true;" << endl;
1527
- indent(out) << "this." << tfield->get_name() << " = value;" << endl;
1528
- scope_down(out);
1529
- scope_down(out);
1530
- out << endl;
1531
- }
1532
-
1533
- std::string t_csharp_generator::prop_name(t_field* tfield) {
1534
- string name (tfield->get_name());
1535
- name[0] = toupper(name[0]);
1536
- return name;
1537
- }
1538
-
1539
- string t_csharp_generator::type_name(t_type* ttype, bool in_container, bool in_init) {
1540
- while (ttype->is_typedef()) {
1541
- ttype = ((t_typedef*)ttype)->get_type();
1542
- }
1543
-
1544
- if (ttype->is_base_type()) {
1545
- return base_type_name((t_base_type*)ttype, in_container);
1546
- } else if (ttype->is_map()) {
1547
- t_map *tmap = (t_map*) ttype;
1548
- return "Dictionary<" + type_name(tmap->get_key_type(), true) +
1549
- ", " + type_name(tmap->get_val_type(), true) + ">";
1550
- } else if (ttype->is_set()) {
1551
- t_set* tset = (t_set*) ttype;
1552
- return "THashSet<" + type_name(tset->get_elem_type(), true) + ">";
1553
- } else if (ttype->is_list()) {
1554
- t_list* tlist = (t_list*) ttype;
1555
- return "List<" + type_name(tlist->get_elem_type(), true) + ">";
1556
- }
1557
-
1558
- t_program* program = ttype->get_program();
1559
- if (program != NULL && program != program_) {
1560
- string ns = program->get_namespace("csharp");
1561
- if (!ns.empty()) {
1562
- return ns + "." + ttype->get_name();
1563
- }
1564
- }
1565
-
1566
- return ttype->get_name();
1567
- }
1568
-
1569
- string t_csharp_generator::base_type_name(t_base_type* tbase, bool in_container) {
1570
- switch (tbase->get_base()) {
1571
- case t_base_type::TYPE_VOID:
1572
- return "void";
1573
- case t_base_type::TYPE_STRING:
1574
- if (tbase->is_binary()) {
1575
- return "byte[]";
1576
- } else {
1577
- return "string";
1578
- }
1579
- case t_base_type::TYPE_BOOL:
1580
- return "bool";
1581
- case t_base_type::TYPE_BYTE:
1582
- return "byte";
1583
- case t_base_type::TYPE_I16:
1584
- return "short";
1585
- case t_base_type::TYPE_I32:
1586
- return "int";
1587
- case t_base_type::TYPE_I64:
1588
- return "long";
1589
- case t_base_type::TYPE_DOUBLE:
1590
- return "double";
1591
- default:
1592
- throw "compiler error: no C# name for base type " + tbase->get_base();
1593
- }
1594
- }
1595
-
1596
- string t_csharp_generator::declare_field(t_field* tfield, bool init) {
1597
- string result = type_name(tfield->get_type()) + " " + tfield->get_name();
1598
- if (init) {
1599
- t_type* ttype = tfield->get_type();
1600
- while (ttype->is_typedef()) {
1601
- ttype = ((t_typedef*)ttype)->get_type();
1602
- }
1603
- if (ttype->is_base_type() && tfield->get_value() != NULL) {
1604
- ofstream dummy;
1605
- result += " = " + render_const_value(dummy, tfield->get_name(), ttype, tfield->get_value());
1606
- } else if (ttype->is_base_type()) {
1607
- t_base_type::t_base tbase = ((t_base_type*)ttype)->get_base();
1608
- switch (tbase) {
1609
- case t_base_type::TYPE_VOID:
1610
- throw "NO T_VOID CONSTRUCT";
1611
- case t_base_type::TYPE_STRING:
1612
- result += " = null";
1613
- break;
1614
- case t_base_type::TYPE_BOOL:
1615
- result += " = false";
1616
- break;
1617
- case t_base_type::TYPE_BYTE:
1618
- case t_base_type::TYPE_I16:
1619
- case t_base_type::TYPE_I32:
1620
- case t_base_type::TYPE_I64:
1621
- result += " = 0";
1622
- break;
1623
- case t_base_type::TYPE_DOUBLE:
1624
- result += " = (double)0";
1625
- break;
1626
- }
1627
- } else if (ttype->is_enum()) {
1628
- result += " = (" + type_name(ttype, false, true) + ")0";
1629
- } else if (ttype->is_container()) {
1630
- result += " = new " + type_name(ttype, false, true) + "()";
1631
- } else {
1632
- result += " = new " + type_name(ttype, false, true) + "()";
1633
- }
1634
- }
1635
- return result + ";";
1636
- }
1637
-
1638
- string t_csharp_generator::function_signature(t_function* tfunction, string prefix) {
1639
- t_type* ttype = tfunction->get_returntype();
1640
- return type_name(ttype) + " " + prefix + tfunction->get_name() + "(" + argument_list(tfunction->get_arglist()) + ")";
1641
- }
1642
-
1643
- string t_csharp_generator::argument_list(t_struct* tstruct) {
1644
- string result = "";
1645
- const vector<t_field*>& fields = tstruct->get_members();
1646
- vector<t_field*>::const_iterator f_iter;
1647
- bool first = true;
1648
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
1649
- if (first) {
1650
- first = false;
1651
- } else {
1652
- result += ", ";
1653
- }
1654
- result += type_name((*f_iter)->get_type()) + " " + (*f_iter)->get_name();
1655
- }
1656
- return result;
1657
- }
1658
-
1659
- string t_csharp_generator::type_to_enum(t_type* type) {
1660
- while (type->is_typedef()) {
1661
- type = ((t_typedef*)type)->get_type();
1662
- }
1663
-
1664
- if (type->is_base_type()) {
1665
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
1666
- switch (tbase) {
1667
- case t_base_type::TYPE_VOID:
1668
- throw "NO T_VOID CONSTRUCT";
1669
- case t_base_type::TYPE_STRING:
1670
- return "TType.String";
1671
- case t_base_type::TYPE_BOOL:
1672
- return "TType.Bool";
1673
- case t_base_type::TYPE_BYTE:
1674
- return "TType.Byte";
1675
- case t_base_type::TYPE_I16:
1676
- return "TType.I16";
1677
- case t_base_type::TYPE_I32:
1678
- return "TType.I32";
1679
- case t_base_type::TYPE_I64:
1680
- return "TType.I64";
1681
- case t_base_type::TYPE_DOUBLE:
1682
- return "TType.Double";
1683
- }
1684
- } else if (type->is_enum()) {
1685
- return "TType.I32";
1686
- } else if (type->is_struct() || type->is_xception()) {
1687
- return "TType.Struct";
1688
- } else if (type->is_map()) {
1689
- return "TType.Map";
1690
- } else if (type->is_set()) {
1691
- return "TType.Set";
1692
- } else if (type->is_list()) {
1693
- return "TType.List";
1694
- }
1695
-
1696
- throw "INVALID TYPE IN type_to_enum: " + type->get_name();
1697
- }
1698
-
1699
-
1700
- THRIFT_REGISTER_GENERATOR(csharp, "C#", "");