tigerbeetle 0.0.34 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/ext/tb_client/extconf.rb +13 -13
  4. data/ext/tb_client/tigerbeetle/LICENSE +177 -0
  5. data/ext/tb_client/tigerbeetle/build.zig +2327 -0
  6. data/ext/tb_client/tigerbeetle/src/aof.zig +1000 -0
  7. data/ext/tb_client/tigerbeetle/src/build_multiversion.zig +808 -0
  8. data/ext/tb_client/tigerbeetle/src/cdc/amqp/protocol.zig +1283 -0
  9. data/ext/tb_client/tigerbeetle/src/cdc/amqp/spec.zig +1704 -0
  10. data/ext/tb_client/tigerbeetle/src/cdc/amqp/types.zig +341 -0
  11. data/ext/tb_client/tigerbeetle/src/cdc/amqp.zig +1450 -0
  12. data/ext/tb_client/tigerbeetle/src/cdc/runner.zig +1659 -0
  13. data/ext/tb_client/tigerbeetle/src/clients/c/samples/main.c +406 -0
  14. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/context.zig +1084 -0
  15. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/echo_client.zig +286 -0
  16. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/packet.zig +158 -0
  17. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/signal.zig +229 -0
  18. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/signal_fuzz.zig +110 -0
  19. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client.h +386 -0
  20. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client.zig +34 -0
  21. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_exports.zig +281 -0
  22. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_header.zig +312 -0
  23. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_header_test.zig +138 -0
  24. data/ext/tb_client/tigerbeetle/src/clients/c/test.zig +466 -0
  25. data/ext/tb_client/tigerbeetle/src/clients/docs_samples.zig +157 -0
  26. data/ext/tb_client/tigerbeetle/src/clients/docs_types.zig +90 -0
  27. data/ext/tb_client/tigerbeetle/src/clients/dotnet/ci.zig +203 -0
  28. data/ext/tb_client/tigerbeetle/src/clients/dotnet/docs.zig +79 -0
  29. data/ext/tb_client/tigerbeetle/src/clients/dotnet/dotnet_bindings.zig +542 -0
  30. data/ext/tb_client/tigerbeetle/src/clients/go/ci.zig +109 -0
  31. data/ext/tb_client/tigerbeetle/src/clients/go/docs.zig +86 -0
  32. data/ext/tb_client/tigerbeetle/src/clients/go/go_bindings.zig +370 -0
  33. data/ext/tb_client/tigerbeetle/src/clients/go/pkg/native/tb_client.h +386 -0
  34. data/ext/tb_client/tigerbeetle/src/clients/java/ci.zig +167 -0
  35. data/ext/tb_client/tigerbeetle/src/clients/java/docs.zig +126 -0
  36. data/ext/tb_client/tigerbeetle/src/clients/java/java_bindings.zig +996 -0
  37. data/ext/tb_client/tigerbeetle/src/clients/java/src/client.zig +748 -0
  38. data/ext/tb_client/tigerbeetle/src/clients/java/src/jni.zig +3238 -0
  39. data/ext/tb_client/tigerbeetle/src/clients/java/src/jni_tests.zig +1718 -0
  40. data/ext/tb_client/tigerbeetle/src/clients/java/src/jni_thread_cleaner.zig +190 -0
  41. data/ext/tb_client/tigerbeetle/src/clients/node/ci.zig +104 -0
  42. data/ext/tb_client/tigerbeetle/src/clients/node/docs.zig +75 -0
  43. data/ext/tb_client/tigerbeetle/src/clients/node/node.zig +522 -0
  44. data/ext/tb_client/tigerbeetle/src/clients/node/node_bindings.zig +267 -0
  45. data/ext/tb_client/tigerbeetle/src/clients/node/src/c.zig +3 -0
  46. data/ext/tb_client/tigerbeetle/src/clients/node/src/translate.zig +379 -0
  47. data/ext/tb_client/tigerbeetle/src/clients/python/ci.zig +131 -0
  48. data/ext/tb_client/tigerbeetle/src/clients/python/docs.zig +63 -0
  49. data/ext/tb_client/tigerbeetle/src/clients/python/python_bindings.zig +588 -0
  50. data/ext/tb_client/tigerbeetle/src/clients/rust/assets/tb_client.h +386 -0
  51. data/ext/tb_client/tigerbeetle/src/clients/rust/ci.zig +73 -0
  52. data/ext/tb_client/tigerbeetle/src/clients/rust/docs.zig +106 -0
  53. data/ext/tb_client/tigerbeetle/src/clients/rust/rust_bindings.zig +305 -0
  54. data/ext/tb_client/tigerbeetle/src/config.zig +296 -0
  55. data/ext/tb_client/tigerbeetle/src/constants.zig +790 -0
  56. data/ext/tb_client/tigerbeetle/src/copyhound.zig +202 -0
  57. data/ext/tb_client/tigerbeetle/src/counting_allocator.zig +72 -0
  58. data/ext/tb_client/tigerbeetle/src/direction.zig +11 -0
  59. data/ext/tb_client/tigerbeetle/src/docs_website/build.zig +158 -0
  60. data/ext/tb_client/tigerbeetle/src/docs_website/src/content.zig +156 -0
  61. data/ext/tb_client/tigerbeetle/src/docs_website/src/docs.zig +252 -0
  62. data/ext/tb_client/tigerbeetle/src/docs_website/src/file_checker.zig +313 -0
  63. data/ext/tb_client/tigerbeetle/src/docs_website/src/html.zig +87 -0
  64. data/ext/tb_client/tigerbeetle/src/docs_website/src/page_writer.zig +63 -0
  65. data/ext/tb_client/tigerbeetle/src/docs_website/src/redirects.zig +47 -0
  66. data/ext/tb_client/tigerbeetle/src/docs_website/src/search_index_writer.zig +28 -0
  67. data/ext/tb_client/tigerbeetle/src/docs_website/src/service_worker_writer.zig +61 -0
  68. data/ext/tb_client/tigerbeetle/src/docs_website/src/single_page_writer.zig +169 -0
  69. data/ext/tb_client/tigerbeetle/src/docs_website/src/website.zig +46 -0
  70. data/ext/tb_client/tigerbeetle/src/ewah.zig +445 -0
  71. data/ext/tb_client/tigerbeetle/src/ewah_benchmark.zig +128 -0
  72. data/ext/tb_client/tigerbeetle/src/ewah_fuzz.zig +171 -0
  73. data/ext/tb_client/tigerbeetle/src/fuzz_tests.zig +179 -0
  74. data/ext/tb_client/tigerbeetle/src/integration_tests.zig +662 -0
  75. data/ext/tb_client/tigerbeetle/src/io/common.zig +155 -0
  76. data/ext/tb_client/tigerbeetle/src/io/darwin.zig +1093 -0
  77. data/ext/tb_client/tigerbeetle/src/io/linux.zig +1880 -0
  78. data/ext/tb_client/tigerbeetle/src/io/test.zig +1005 -0
  79. data/ext/tb_client/tigerbeetle/src/io/windows.zig +1598 -0
  80. data/ext/tb_client/tigerbeetle/src/io.zig +34 -0
  81. data/ext/tb_client/tigerbeetle/src/iops.zig +134 -0
  82. data/ext/tb_client/tigerbeetle/src/list.zig +236 -0
  83. data/ext/tb_client/tigerbeetle/src/lsm/binary_search.zig +848 -0
  84. data/ext/tb_client/tigerbeetle/src/lsm/binary_search_benchmark.zig +179 -0
  85. data/ext/tb_client/tigerbeetle/src/lsm/cache_map.zig +424 -0
  86. data/ext/tb_client/tigerbeetle/src/lsm/cache_map_fuzz.zig +420 -0
  87. data/ext/tb_client/tigerbeetle/src/lsm/compaction.zig +2117 -0
  88. data/ext/tb_client/tigerbeetle/src/lsm/composite_key.zig +182 -0
  89. data/ext/tb_client/tigerbeetle/src/lsm/forest.zig +1119 -0
  90. data/ext/tb_client/tigerbeetle/src/lsm/forest_fuzz.zig +1102 -0
  91. data/ext/tb_client/tigerbeetle/src/lsm/forest_table_iterator.zig +200 -0
  92. data/ext/tb_client/tigerbeetle/src/lsm/groove.zig +1495 -0
  93. data/ext/tb_client/tigerbeetle/src/lsm/k_way_merge.zig +739 -0
  94. data/ext/tb_client/tigerbeetle/src/lsm/k_way_merge_benchmark.zig +166 -0
  95. data/ext/tb_client/tigerbeetle/src/lsm/manifest.zig +754 -0
  96. data/ext/tb_client/tigerbeetle/src/lsm/manifest_level.zig +1294 -0
  97. data/ext/tb_client/tigerbeetle/src/lsm/manifest_level_fuzz.zig +510 -0
  98. data/ext/tb_client/tigerbeetle/src/lsm/manifest_log.zig +1263 -0
  99. data/ext/tb_client/tigerbeetle/src/lsm/manifest_log_fuzz.zig +628 -0
  100. data/ext/tb_client/tigerbeetle/src/lsm/node_pool.zig +247 -0
  101. data/ext/tb_client/tigerbeetle/src/lsm/scan_buffer.zig +116 -0
  102. data/ext/tb_client/tigerbeetle/src/lsm/scan_builder.zig +543 -0
  103. data/ext/tb_client/tigerbeetle/src/lsm/scan_fuzz.zig +938 -0
  104. data/ext/tb_client/tigerbeetle/src/lsm/scan_lookup.zig +293 -0
  105. data/ext/tb_client/tigerbeetle/src/lsm/scan_merge.zig +362 -0
  106. data/ext/tb_client/tigerbeetle/src/lsm/scan_range.zig +99 -0
  107. data/ext/tb_client/tigerbeetle/src/lsm/scan_state.zig +17 -0
  108. data/ext/tb_client/tigerbeetle/src/lsm/scan_tree.zig +1036 -0
  109. data/ext/tb_client/tigerbeetle/src/lsm/schema.zig +617 -0
  110. data/ext/tb_client/tigerbeetle/src/lsm/scratch_memory.zig +84 -0
  111. data/ext/tb_client/tigerbeetle/src/lsm/segmented_array.zig +1500 -0
  112. data/ext/tb_client/tigerbeetle/src/lsm/segmented_array_benchmark.zig +149 -0
  113. data/ext/tb_client/tigerbeetle/src/lsm/segmented_array_fuzz.zig +7 -0
  114. data/ext/tb_client/tigerbeetle/src/lsm/set_associative_cache.zig +865 -0
  115. data/ext/tb_client/tigerbeetle/src/lsm/table.zig +607 -0
  116. data/ext/tb_client/tigerbeetle/src/lsm/table_memory.zig +843 -0
  117. data/ext/tb_client/tigerbeetle/src/lsm/table_value_iterator.zig +105 -0
  118. data/ext/tb_client/tigerbeetle/src/lsm/timestamp_range.zig +40 -0
  119. data/ext/tb_client/tigerbeetle/src/lsm/tree.zig +630 -0
  120. data/ext/tb_client/tigerbeetle/src/lsm/tree_fuzz.zig +933 -0
  121. data/ext/tb_client/tigerbeetle/src/lsm/zig_zag_merge.zig +557 -0
  122. data/ext/tb_client/tigerbeetle/src/message_buffer.zig +469 -0
  123. data/ext/tb_client/tigerbeetle/src/message_bus.zig +1214 -0
  124. data/ext/tb_client/tigerbeetle/src/message_bus_fuzz.zig +936 -0
  125. data/ext/tb_client/tigerbeetle/src/message_pool.zig +343 -0
  126. data/ext/tb_client/tigerbeetle/src/multiversion.zig +2195 -0
  127. data/ext/tb_client/tigerbeetle/src/queue.zig +390 -0
  128. data/ext/tb_client/tigerbeetle/src/repl/completion.zig +201 -0
  129. data/ext/tb_client/tigerbeetle/src/repl/parser.zig +1356 -0
  130. data/ext/tb_client/tigerbeetle/src/repl/terminal.zig +496 -0
  131. data/ext/tb_client/tigerbeetle/src/repl.zig +1034 -0
  132. data/ext/tb_client/tigerbeetle/src/scripts/amqp.zig +973 -0
  133. data/ext/tb_client/tigerbeetle/src/scripts/cfo.zig +1866 -0
  134. data/ext/tb_client/tigerbeetle/src/scripts/changelog.zig +304 -0
  135. data/ext/tb_client/tigerbeetle/src/scripts/ci.zig +227 -0
  136. data/ext/tb_client/tigerbeetle/src/scripts/client_readmes.zig +658 -0
  137. data/ext/tb_client/tigerbeetle/src/scripts/devhub.zig +466 -0
  138. data/ext/tb_client/tigerbeetle/src/scripts/release.zig +1058 -0
  139. data/ext/tb_client/tigerbeetle/src/scripts.zig +105 -0
  140. data/ext/tb_client/tigerbeetle/src/shell.zig +1195 -0
  141. data/ext/tb_client/tigerbeetle/src/stack.zig +260 -0
  142. data/ext/tb_client/tigerbeetle/src/state_machine/auditor.zig +911 -0
  143. data/ext/tb_client/tigerbeetle/src/state_machine/workload.zig +2079 -0
  144. data/ext/tb_client/tigerbeetle/src/state_machine.zig +4872 -0
  145. data/ext/tb_client/tigerbeetle/src/state_machine_fuzz.zig +288 -0
  146. data/ext/tb_client/tigerbeetle/src/state_machine_tests.zig +3128 -0
  147. data/ext/tb_client/tigerbeetle/src/static_allocator.zig +82 -0
  148. data/ext/tb_client/tigerbeetle/src/stdx/bit_set.zig +157 -0
  149. data/ext/tb_client/tigerbeetle/src/stdx/bounded_array.zig +292 -0
  150. data/ext/tb_client/tigerbeetle/src/stdx/debug.zig +65 -0
  151. data/ext/tb_client/tigerbeetle/src/stdx/flags.zig +1414 -0
  152. data/ext/tb_client/tigerbeetle/src/stdx/mlock.zig +92 -0
  153. data/ext/tb_client/tigerbeetle/src/stdx/prng.zig +677 -0
  154. data/ext/tb_client/tigerbeetle/src/stdx/radix.zig +336 -0
  155. data/ext/tb_client/tigerbeetle/src/stdx/ring_buffer.zig +511 -0
  156. data/ext/tb_client/tigerbeetle/src/stdx/sort_test.zig +112 -0
  157. data/ext/tb_client/tigerbeetle/src/stdx/stdx.zig +1160 -0
  158. data/ext/tb_client/tigerbeetle/src/stdx/testing/low_level_hash_vectors.zig +142 -0
  159. data/ext/tb_client/tigerbeetle/src/stdx/testing/snaptest.zig +361 -0
  160. data/ext/tb_client/tigerbeetle/src/stdx/time_units.zig +275 -0
  161. data/ext/tb_client/tigerbeetle/src/stdx/unshare.zig +295 -0
  162. data/ext/tb_client/tigerbeetle/src/stdx/vendored/aegis.zig +436 -0
  163. data/ext/tb_client/tigerbeetle/src/stdx/windows.zig +48 -0
  164. data/ext/tb_client/tigerbeetle/src/stdx/zipfian.zig +402 -0
  165. data/ext/tb_client/tigerbeetle/src/storage.zig +489 -0
  166. data/ext/tb_client/tigerbeetle/src/storage_fuzz.zig +180 -0
  167. data/ext/tb_client/tigerbeetle/src/testing/bench.zig +146 -0
  168. data/ext/tb_client/tigerbeetle/src/testing/cluster/grid_checker.zig +53 -0
  169. data/ext/tb_client/tigerbeetle/src/testing/cluster/journal_checker.zig +61 -0
  170. data/ext/tb_client/tigerbeetle/src/testing/cluster/manifest_checker.zig +76 -0
  171. data/ext/tb_client/tigerbeetle/src/testing/cluster/message_bus.zig +110 -0
  172. data/ext/tb_client/tigerbeetle/src/testing/cluster/network.zig +412 -0
  173. data/ext/tb_client/tigerbeetle/src/testing/cluster/state_checker.zig +331 -0
  174. data/ext/tb_client/tigerbeetle/src/testing/cluster/storage_checker.zig +458 -0
  175. data/ext/tb_client/tigerbeetle/src/testing/cluster.zig +1198 -0
  176. data/ext/tb_client/tigerbeetle/src/testing/exhaustigen.zig +128 -0
  177. data/ext/tb_client/tigerbeetle/src/testing/fixtures.zig +181 -0
  178. data/ext/tb_client/tigerbeetle/src/testing/fuzz.zig +144 -0
  179. data/ext/tb_client/tigerbeetle/src/testing/id.zig +97 -0
  180. data/ext/tb_client/tigerbeetle/src/testing/io.zig +317 -0
  181. data/ext/tb_client/tigerbeetle/src/testing/marks.zig +126 -0
  182. data/ext/tb_client/tigerbeetle/src/testing/packet_simulator.zig +533 -0
  183. data/ext/tb_client/tigerbeetle/src/testing/reply_sequence.zig +154 -0
  184. data/ext/tb_client/tigerbeetle/src/testing/state_machine.zig +389 -0
  185. data/ext/tb_client/tigerbeetle/src/testing/storage.zig +1247 -0
  186. data/ext/tb_client/tigerbeetle/src/testing/table.zig +249 -0
  187. data/ext/tb_client/tigerbeetle/src/testing/time.zig +98 -0
  188. data/ext/tb_client/tigerbeetle/src/testing/tmp_tigerbeetle.zig +212 -0
  189. data/ext/tb_client/tigerbeetle/src/testing/vortex/constants.zig +26 -0
  190. data/ext/tb_client/tigerbeetle/src/testing/vortex/faulty_network.zig +580 -0
  191. data/ext/tb_client/tigerbeetle/src/testing/vortex/java_driver/ci.zig +39 -0
  192. data/ext/tb_client/tigerbeetle/src/testing/vortex/logged_process.zig +214 -0
  193. data/ext/tb_client/tigerbeetle/src/testing/vortex/rust_driver/ci.zig +34 -0
  194. data/ext/tb_client/tigerbeetle/src/testing/vortex/supervisor.zig +766 -0
  195. data/ext/tb_client/tigerbeetle/src/testing/vortex/workload.zig +543 -0
  196. data/ext/tb_client/tigerbeetle/src/testing/vortex/zig_driver.zig +181 -0
  197. data/ext/tb_client/tigerbeetle/src/tidy.zig +1448 -0
  198. data/ext/tb_client/tigerbeetle/src/tigerbeetle/benchmark_driver.zig +227 -0
  199. data/ext/tb_client/tigerbeetle/src/tigerbeetle/benchmark_load.zig +1069 -0
  200. data/ext/tb_client/tigerbeetle/src/tigerbeetle/cli.zig +1422 -0
  201. data/ext/tb_client/tigerbeetle/src/tigerbeetle/inspect.zig +1658 -0
  202. data/ext/tb_client/tigerbeetle/src/tigerbeetle/inspect_integrity.zig +518 -0
  203. data/ext/tb_client/tigerbeetle/src/tigerbeetle/libtb_client.zig +36 -0
  204. data/ext/tb_client/tigerbeetle/src/tigerbeetle/main.zig +646 -0
  205. data/ext/tb_client/tigerbeetle/src/tigerbeetle.zig +958 -0
  206. data/ext/tb_client/tigerbeetle/src/time.zig +236 -0
  207. data/ext/tb_client/tigerbeetle/src/trace/event.zig +745 -0
  208. data/ext/tb_client/tigerbeetle/src/trace/statsd.zig +462 -0
  209. data/ext/tb_client/tigerbeetle/src/trace.zig +556 -0
  210. data/ext/tb_client/tigerbeetle/src/unit_tests.zig +321 -0
  211. data/ext/tb_client/tigerbeetle/src/vopr.zig +1785 -0
  212. data/ext/tb_client/tigerbeetle/src/vortex.zig +101 -0
  213. data/ext/tb_client/tigerbeetle/src/vsr/checkpoint_trailer.zig +473 -0
  214. data/ext/tb_client/tigerbeetle/src/vsr/checksum.zig +208 -0
  215. data/ext/tb_client/tigerbeetle/src/vsr/checksum_benchmark.zig +43 -0
  216. data/ext/tb_client/tigerbeetle/src/vsr/client.zig +768 -0
  217. data/ext/tb_client/tigerbeetle/src/vsr/client_replies.zig +532 -0
  218. data/ext/tb_client/tigerbeetle/src/vsr/client_sessions.zig +338 -0
  219. data/ext/tb_client/tigerbeetle/src/vsr/clock.zig +1019 -0
  220. data/ext/tb_client/tigerbeetle/src/vsr/fault_detector.zig +279 -0
  221. data/ext/tb_client/tigerbeetle/src/vsr/free_set.zig +1381 -0
  222. data/ext/tb_client/tigerbeetle/src/vsr/free_set_fuzz.zig +315 -0
  223. data/ext/tb_client/tigerbeetle/src/vsr/grid.zig +1460 -0
  224. data/ext/tb_client/tigerbeetle/src/vsr/grid_blocks_missing.zig +757 -0
  225. data/ext/tb_client/tigerbeetle/src/vsr/grid_scrubber.zig +797 -0
  226. data/ext/tb_client/tigerbeetle/src/vsr/journal.zig +2586 -0
  227. data/ext/tb_client/tigerbeetle/src/vsr/marzullo.zig +308 -0
  228. data/ext/tb_client/tigerbeetle/src/vsr/message_header.zig +1777 -0
  229. data/ext/tb_client/tigerbeetle/src/vsr/multi_batch.zig +715 -0
  230. data/ext/tb_client/tigerbeetle/src/vsr/multi_batch_fuzz.zig +185 -0
  231. data/ext/tb_client/tigerbeetle/src/vsr/repair_budget.zig +333 -0
  232. data/ext/tb_client/tigerbeetle/src/vsr/replica.zig +12355 -0
  233. data/ext/tb_client/tigerbeetle/src/vsr/replica_format.zig +416 -0
  234. data/ext/tb_client/tigerbeetle/src/vsr/replica_reformat.zig +165 -0
  235. data/ext/tb_client/tigerbeetle/src/vsr/replica_test.zig +2910 -0
  236. data/ext/tb_client/tigerbeetle/src/vsr/routing.zig +1075 -0
  237. data/ext/tb_client/tigerbeetle/src/vsr/superblock.zig +1603 -0
  238. data/ext/tb_client/tigerbeetle/src/vsr/superblock_fuzz.zig +484 -0
  239. data/ext/tb_client/tigerbeetle/src/vsr/superblock_quorums.zig +405 -0
  240. data/ext/tb_client/tigerbeetle/src/vsr/superblock_quorums_fuzz.zig +355 -0
  241. data/ext/tb_client/tigerbeetle/src/vsr/sync.zig +29 -0
  242. data/ext/tb_client/tigerbeetle/src/vsr.zig +1727 -0
  243. data/lib/tb_client/shared_lib.rb +12 -5
  244. data/lib/tigerbeetle/client.rb +1 -1
  245. data/lib/tigerbeetle/platforms.rb +9 -0
  246. data/lib/tigerbeetle/version.rb +2 -2
  247. data/tigerbeetle.gemspec +22 -5
  248. metadata +242 -3
  249. data/ext/tb_client/pkg.tar.gz +0 -0
@@ -0,0 +1,341 @@
1
+ const std = @import("std");
2
+ const builtin = @import("builtin");
3
+ const vsr = @import("../../vsr.zig");
4
+ const protocol = @import("protocol.zig");
5
+ const Encoder = protocol.Encoder;
6
+ const Decoder = protocol.Decoder;
7
+
8
+ pub const ConnectOptions = struct {
9
+ host: std.net.Address,
10
+ user_name: []const u8,
11
+ password: []const u8,
12
+ vhost: []const u8,
13
+ locale: ?[]const u8 = null,
14
+ heartbeat_seconds: ?u16 = null,
15
+ properties: ConnectionProperties = ConnectionProperties.default,
16
+ };
17
+
18
+ pub const ConnectionProperties = struct {
19
+ product: []const u8,
20
+ version: []const u8,
21
+ platform: []const u8,
22
+ capabilities: *const ClientCapabilities,
23
+
24
+ pub const default: ConnectionProperties = .{
25
+ .product = "TigerBeetle",
26
+ .version = std.fmt.comptimePrint(
27
+ "{}",
28
+ .{vsr.constants.config.process.release},
29
+ ),
30
+ // By convention, "platform" refers to the programming language.
31
+ // e.g., Erlang, Java, Go, etc.
32
+ .platform = "Zig " ++ builtin.zig_version_string,
33
+ .capabilities = &ClientCapabilities.default,
34
+ };
35
+
36
+ pub fn table(self: *const ConnectionProperties) Encoder.Table {
37
+ const vtable: Encoder.Table.VTable = comptime .{
38
+ .write = &struct {
39
+ fn write(context: *const anyopaque, encoder: *Encoder.TableEncoder) void {
40
+ const properties: *const ConnectionProperties = @ptrCast(@alignCast(context));
41
+ inline for (std.meta.fields(ConnectionProperties)) |field| {
42
+ const value = @field(properties, field.name);
43
+ encoder.put(field.name, switch (field.type) {
44
+ []const u8 => .{ .string = value },
45
+ *const ClientCapabilities => .{ .field_table = value.table() },
46
+ else => comptime unreachable,
47
+ });
48
+ }
49
+ }
50
+ }.write,
51
+ };
52
+ return .{ .context = self, .vtable = &vtable };
53
+ }
54
+ };
55
+
56
+ pub const ClientCapabilities = struct {
57
+ publisher_confirms: bool,
58
+ exchange_exchange_bindings: bool,
59
+ basic_nack: bool,
60
+ consumer_cancel_notify: bool,
61
+ connection_blocked: bool,
62
+ consumer_priorities: bool,
63
+ authentication_failure_close: bool,
64
+ per_consumer_qos: bool,
65
+ direct_reply_to: bool,
66
+
67
+ pub const default: ClientCapabilities = .{
68
+ .publisher_confirms = true,
69
+ .exchange_exchange_bindings = false,
70
+ .basic_nack = true,
71
+ .consumer_cancel_notify = false,
72
+ .connection_blocked = false,
73
+ .consumer_priorities = false,
74
+ .authentication_failure_close = true,
75
+ .per_consumer_qos = false,
76
+ .direct_reply_to = false,
77
+ };
78
+
79
+ pub fn table(self: *const ClientCapabilities) Encoder.Table {
80
+ const vtable: Encoder.Table.VTable = comptime .{
81
+ .write = &struct {
82
+ fn write(context: *const anyopaque, encoder: *Encoder.TableEncoder) void {
83
+ const capabilities: *const ClientCapabilities = @ptrCast(@alignCast(context));
84
+ encoder.put("publisher_confirms", .{
85
+ .boolean = capabilities.publisher_confirms,
86
+ });
87
+ encoder.put("exchange_exchange_bindings", .{
88
+ .boolean = capabilities.exchange_exchange_bindings,
89
+ });
90
+ encoder.put("basic.nack", .{
91
+ .boolean = capabilities.basic_nack,
92
+ });
93
+ encoder.put("consumer_cancel_notify", .{
94
+ .boolean = capabilities.consumer_cancel_notify,
95
+ });
96
+ encoder.put("connection.blocked", .{
97
+ .boolean = capabilities.connection_blocked,
98
+ });
99
+ encoder.put("consumer_priorities", .{
100
+ .boolean = capabilities.consumer_priorities,
101
+ });
102
+ encoder.put("authentication_failure_close", .{
103
+ .boolean = capabilities.authentication_failure_close,
104
+ });
105
+ encoder.put("per_consumer_qos", .{
106
+ .boolean = capabilities.per_consumer_qos,
107
+ });
108
+ encoder.put("direct_reply_to", .{
109
+ .boolean = capabilities.direct_reply_to,
110
+ });
111
+ }
112
+ }.write,
113
+ };
114
+ return .{ .context = self, .vtable = &vtable };
115
+ }
116
+ };
117
+
118
+ /// "SASL" means "Simple Authentication and Security Layer"
119
+ pub const SASLPlainAuth = struct {
120
+ pub const mechanism = "PLAIN";
121
+
122
+ user_name: []const u8,
123
+ password: []const u8,
124
+
125
+ /// Response returns the SASL PLAIN mechanism encoding, delimited by null characters.
126
+ pub fn response(self: *const SASLPlainAuth) Encoder.Body {
127
+ const vtable: Encoder.Body.VTable = comptime .{
128
+ .write = &struct {
129
+ fn write(context: *const anyopaque, buffer: []u8) usize {
130
+ const auth: *const SASLPlainAuth = @ptrCast(@alignCast(context));
131
+ var fbs = std.io.fixedBufferStream(buffer);
132
+ fbs.writer().print("\x00{s}\x00{s}", .{
133
+ auth.user_name,
134
+ auth.password,
135
+ }) catch unreachable;
136
+ return fbs.pos;
137
+ }
138
+ }.write,
139
+ };
140
+ return .{ .context = self, .vtable = &vtable };
141
+ }
142
+ };
143
+
144
+ pub const QueueOverflow = enum {
145
+ drop_head,
146
+ reject_publish,
147
+ reject_publish_dlx,
148
+ };
149
+
150
+ /// A set of implementation-defined arguments for the declaration.
151
+ /// The syntax and semantics of these arguments are specific to RabbitMQ.
152
+ pub const QueueDeclareArguments = struct {
153
+ /// How long a queue can be unused for before it is automatically deleted (milliseconds).
154
+ /// (Sets the "x-expires" argument.)
155
+ expires: ?u32 = null,
156
+ /// How long a message published to a queue can live before it is discarded (milliseconds).
157
+ /// (Sets the "x-message-ttl" argument.)
158
+ message_ttl: ?u32 = null,
159
+ /// Sets the queue overflow behaviour.
160
+ /// This determines what happens to messages when the maximum length of a queue is reached.
161
+ overflow: ?QueueOverflow = null,
162
+ /// If set, makes sure only one consumer at a time consumes from the queue and fails over
163
+ /// to another registered consumer in case the active one is cancelled or dies.
164
+ /// (Sets the "x-single-active-consumer" argument.)
165
+ single_active_consumer: ?bool = false,
166
+ /// Optional name of an exchange to which messages will be republished
167
+ /// if they are rejected or expire.
168
+ /// (Sets the "x-dead-letter-exchange" argument.)
169
+ dead_letter_exchange: ?[]const u8 = null,
170
+ /// Optional replacement routing key to use when a message is dead-lettered.
171
+ /// If this is not set, the message's original routing key will be used.
172
+ /// (Sets the "x-dead-letter-routing-key" argument.)
173
+ dead_letter_routing_key: ?[]const u8 = null,
174
+ /// How many (ready) messages a queue can contain before it starts to drop them
175
+ /// from its head.
176
+ /// (Sets the "x-max-length" argument.)
177
+ max_length: ?u32 = null,
178
+ /// Total body size for ready messages a queue can contain before it starts to drop
179
+ /// them from its head.
180
+ /// (Sets the "x-max-length-bytes" argument.)
181
+ max_length_bytes: ?u32 = null,
182
+
183
+ pub fn table(self: *const QueueDeclareArguments) Encoder.Table {
184
+ const vtable: Encoder.Table.VTable = comptime .{
185
+ .write = &struct {
186
+ fn write(context: *const anyopaque, encoder: *Encoder.TableEncoder) void {
187
+ const arguments: *const QueueDeclareArguments = @ptrCast(@alignCast(context));
188
+ inline for (std.meta.fields(QueueDeclareArguments)) |field| {
189
+ if (@field(arguments, field.name)) |value| {
190
+ const FieldType = @TypeOf(value);
191
+ // Keys are follow the pattern "x-max-length":
192
+ const key = comptime "x-" ++ kebab_case(field.name);
193
+ switch (FieldType) {
194
+ []const u8 => encoder.put(key, .{ .string = value }),
195
+ QueueOverflow => encoder.put(key, .{ .string = switch (value) {
196
+ inline else => |tag| comptime "" ++ kebab_case(@tagName(tag)),
197
+ } }),
198
+ bool => encoder.put(key, .{ .boolean = value }),
199
+ u32 => encoder.put(key, .{ .uint32 = value }),
200
+ else => comptime unreachable,
201
+ }
202
+ }
203
+ }
204
+ }
205
+ fn kebab_case(comptime key: []const u8) []const u8 {
206
+ comptime {
207
+ var buffer: [key.len]u8 = @as(*const [key.len]u8, @ptrCast(key)).*;
208
+ std.mem.replaceScalar(u8, &buffer, '_', '-');
209
+ return &buffer;
210
+ }
211
+ }
212
+ }.write,
213
+ };
214
+ return .{ .context = self, .vtable = &vtable };
215
+ }
216
+ };
217
+
218
+ pub const BasicPublishOptions = struct {
219
+ /// Specifies the name of the exchange to publish to. The exchange name can be
220
+ /// empty, meaning the default exchange. If the exchange name is specified, and that
221
+ /// exchange does not exist, the server will raise a channel exception.
222
+ exchange: []const u8,
223
+ /// Message routing key.
224
+ /// Specifies the routing key for the message. The routing key is used for routing
225
+ /// messages depending on the exchange configuration.
226
+ routing_key: []const u8,
227
+ /// Indicate mandatory routing.
228
+ /// This flag tells the server how to react if the message cannot be routed to a
229
+ /// queue. If this flag is set, the server will return an unroutable message with a
230
+ /// Return method. If this flag is zero, the server silently drops the message.
231
+ mandatory: bool,
232
+ /// Request immediate delivery.
233
+ /// This flag tells the server how to react if the message cannot be routed to a
234
+ /// queue consumer immediately. If this flag is set, the server will return an
235
+ /// undeliverable message with a Return method. If this flag is zero, the server
236
+ /// will queue the message, but with no guarantee that it will ever be consumed.
237
+ immediate: bool,
238
+ /// Metadata associated with the message.
239
+ properties: Encoder.BasicProperties,
240
+ /// The message payload.
241
+ body: ?Encoder.Body,
242
+ };
243
+
244
+ pub const QueueDeclareOptions = struct {
245
+ queue: []const u8,
246
+ /// Do not create queue.
247
+ /// If set, the server will reply with Declare-Ok if the queue already
248
+ /// exists with the same name, and raise an error if not. The client can
249
+ /// use this to check whether a queue exists without modifying the
250
+ /// server state. When set, all other method fields except name and no-wait
251
+ /// are ignored. A declare with both passive and no-wait has no effect.
252
+ /// Arguments are compared for semantic equivalence.
253
+ passive: bool,
254
+ /// Request a durable queue.
255
+ /// If set when creating a new queue, the queue will be marked as durable. Durable
256
+ /// queues remain active when a server restarts. Non-durable queues (transient
257
+ /// queues) are purged if/when a server restarts. Note that durable queues do not
258
+ /// necessarily hold persistent messages, although it does not make sense to send
259
+ /// persistent messages to a transient queue.
260
+ durable: bool,
261
+ /// Request an exclusive queue.
262
+ /// Exclusive queues may only be accessed by the current connection, and are
263
+ /// deleted when that connection closes. Passive declaration of an exclusive
264
+ /// queue by other connections are not allowed.
265
+ exclusive: bool,
266
+ /// Auto-delete queue when unused.
267
+ /// If set, the queue is deleted when all consumers have finished using it. The last
268
+ /// consumer can be cancelled either explicitly or because its channel is closed. If
269
+ /// there was no consumer ever on the queue, it won't be deleted. Applications can
270
+ /// explicitly delete auto-delete queues using the Delete method as normal.
271
+ auto_delete: bool,
272
+ /// A set of implementation-defined arguments for the declaration.
273
+ /// The syntax and semantics of these arguments are specific to RabbitMQ.
274
+ arguments: QueueDeclareArguments,
275
+ };
276
+
277
+ pub const ExchangeDeclareOptions = struct {
278
+ exchange: []const u8,
279
+ /// Exchange type.
280
+ /// Each exchange belongs to one of a set of exchange types implemented by the
281
+ /// server. The exchange types define the functionality of the exchange - i.e. how
282
+ /// messages are routed through it. It is not valid or meaningful to attempt to
283
+ /// change the type of an existing exchange.
284
+ type: []const u8,
285
+ /// Do not create exchange.
286
+ /// If set, the server will reply with Declare-Ok if the exchange already
287
+ /// exists with the same name, and raise an error if not. The client can
288
+ /// use this to check whether an exchange exists without modifying the
289
+ /// server state. When set, all other method fields except name and no-wait
290
+ /// are ignored. A declare with both passive and no-wait has no effect.
291
+ /// Arguments are compared for semantic equivalence.
292
+ passive: bool,
293
+ /// Request a durable exchange.
294
+ /// If set when creating a new exchange, the exchange will be marked as durable.
295
+ /// Durable exchanges remain active when a server restarts. Non-durable exchanges
296
+ /// (transient exchanges) are purged if/when a server restarts.
297
+ durable: bool,
298
+ /// Auto-delete when unused.
299
+ /// If set, the exchange is deleted when all queues have
300
+ /// finished using it.
301
+ auto_delete: bool,
302
+ /// Create internal exchange.
303
+ /// If set, the exchange may not be used directly by publishers,
304
+ /// but only when bound to other exchanges. Internal exchanges
305
+ /// are used to construct wiring that is not visible to
306
+ /// applications.
307
+ internal: bool,
308
+ };
309
+
310
+ pub const GetMessageOptions = struct {
311
+ /// Specifies the name of the queue to get a message from.
312
+ queue: []const u8,
313
+ /// When `true`, indicates that the message does not require an acknowledgment
314
+ /// and will be instantly acknowledged upon delivery.
315
+ no_ack: bool,
316
+ };
317
+
318
+ pub const GetMessagePropertiesResult = struct {
319
+ /// Delivery tag used to acknowledge or reject the message.
320
+ delivery_tag: u64,
321
+ /// The number of messages still available in the queue.
322
+ message_count: u32,
323
+ /// Basic properties including custom headers.
324
+ properties: Decoder.BasicProperties,
325
+ /// Indicates whether the message includes a body frame.
326
+ has_body: bool,
327
+ };
328
+
329
+ pub const BasicNackOptions = struct {
330
+ delivery_tag: u64,
331
+ /// Requeue the message.
332
+ /// If requeue is true, the server will attempt to requeue the message.
333
+ requeue: bool,
334
+ /// Reject multiple messages.
335
+ /// If set to `true`, the delivery tag is treated as "up to and including",
336
+ /// so that multiple messages can be rejected with a single method.
337
+ /// If set to zero, the delivery tag refers to a single message.
338
+ /// If the multiple field is `true`, and the delivery tag is `false`,
339
+ /// this indicates rejection of all outstanding messages.
340
+ multiple: bool,
341
+ };