tigerbeetle 0.0.36 → 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 (247) hide show
  1. checksums.yaml +4 -4
  2. data/ext/tb_client/extconf.rb +13 -13
  3. data/ext/tb_client/tigerbeetle/LICENSE +177 -0
  4. data/ext/tb_client/tigerbeetle/build.zig +2327 -0
  5. data/ext/tb_client/tigerbeetle/src/aof.zig +1000 -0
  6. data/ext/tb_client/tigerbeetle/src/build_multiversion.zig +808 -0
  7. data/ext/tb_client/tigerbeetle/src/cdc/amqp/protocol.zig +1283 -0
  8. data/ext/tb_client/tigerbeetle/src/cdc/amqp/spec.zig +1704 -0
  9. data/ext/tb_client/tigerbeetle/src/cdc/amqp/types.zig +341 -0
  10. data/ext/tb_client/tigerbeetle/src/cdc/amqp.zig +1450 -0
  11. data/ext/tb_client/tigerbeetle/src/cdc/runner.zig +1659 -0
  12. data/ext/tb_client/tigerbeetle/src/clients/c/samples/main.c +406 -0
  13. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/context.zig +1084 -0
  14. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/echo_client.zig +286 -0
  15. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/packet.zig +158 -0
  16. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/signal.zig +229 -0
  17. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/signal_fuzz.zig +110 -0
  18. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client.h +386 -0
  19. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client.zig +34 -0
  20. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_exports.zig +281 -0
  21. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_header.zig +312 -0
  22. data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_header_test.zig +138 -0
  23. data/ext/tb_client/tigerbeetle/src/clients/c/test.zig +466 -0
  24. data/ext/tb_client/tigerbeetle/src/clients/docs_samples.zig +157 -0
  25. data/ext/tb_client/tigerbeetle/src/clients/docs_types.zig +90 -0
  26. data/ext/tb_client/tigerbeetle/src/clients/dotnet/ci.zig +203 -0
  27. data/ext/tb_client/tigerbeetle/src/clients/dotnet/docs.zig +79 -0
  28. data/ext/tb_client/tigerbeetle/src/clients/dotnet/dotnet_bindings.zig +542 -0
  29. data/ext/tb_client/tigerbeetle/src/clients/go/ci.zig +109 -0
  30. data/ext/tb_client/tigerbeetle/src/clients/go/docs.zig +86 -0
  31. data/ext/tb_client/tigerbeetle/src/clients/go/go_bindings.zig +370 -0
  32. data/ext/tb_client/tigerbeetle/src/clients/go/pkg/native/tb_client.h +386 -0
  33. data/ext/tb_client/tigerbeetle/src/clients/java/ci.zig +167 -0
  34. data/ext/tb_client/tigerbeetle/src/clients/java/docs.zig +126 -0
  35. data/ext/tb_client/tigerbeetle/src/clients/java/java_bindings.zig +996 -0
  36. data/ext/tb_client/tigerbeetle/src/clients/java/src/client.zig +748 -0
  37. data/ext/tb_client/tigerbeetle/src/clients/java/src/jni.zig +3238 -0
  38. data/ext/tb_client/tigerbeetle/src/clients/java/src/jni_tests.zig +1718 -0
  39. data/ext/tb_client/tigerbeetle/src/clients/java/src/jni_thread_cleaner.zig +190 -0
  40. data/ext/tb_client/tigerbeetle/src/clients/node/ci.zig +104 -0
  41. data/ext/tb_client/tigerbeetle/src/clients/node/docs.zig +75 -0
  42. data/ext/tb_client/tigerbeetle/src/clients/node/node.zig +522 -0
  43. data/ext/tb_client/tigerbeetle/src/clients/node/node_bindings.zig +267 -0
  44. data/ext/tb_client/tigerbeetle/src/clients/node/src/c.zig +3 -0
  45. data/ext/tb_client/tigerbeetle/src/clients/node/src/translate.zig +379 -0
  46. data/ext/tb_client/tigerbeetle/src/clients/python/ci.zig +131 -0
  47. data/ext/tb_client/tigerbeetle/src/clients/python/docs.zig +63 -0
  48. data/ext/tb_client/tigerbeetle/src/clients/python/python_bindings.zig +588 -0
  49. data/ext/tb_client/tigerbeetle/src/clients/rust/assets/tb_client.h +386 -0
  50. data/ext/tb_client/tigerbeetle/src/clients/rust/ci.zig +73 -0
  51. data/ext/tb_client/tigerbeetle/src/clients/rust/docs.zig +106 -0
  52. data/ext/tb_client/tigerbeetle/src/clients/rust/rust_bindings.zig +305 -0
  53. data/ext/tb_client/tigerbeetle/src/config.zig +296 -0
  54. data/ext/tb_client/tigerbeetle/src/constants.zig +790 -0
  55. data/ext/tb_client/tigerbeetle/src/copyhound.zig +202 -0
  56. data/ext/tb_client/tigerbeetle/src/counting_allocator.zig +72 -0
  57. data/ext/tb_client/tigerbeetle/src/direction.zig +11 -0
  58. data/ext/tb_client/tigerbeetle/src/docs_website/build.zig +158 -0
  59. data/ext/tb_client/tigerbeetle/src/docs_website/src/content.zig +156 -0
  60. data/ext/tb_client/tigerbeetle/src/docs_website/src/docs.zig +252 -0
  61. data/ext/tb_client/tigerbeetle/src/docs_website/src/file_checker.zig +313 -0
  62. data/ext/tb_client/tigerbeetle/src/docs_website/src/html.zig +87 -0
  63. data/ext/tb_client/tigerbeetle/src/docs_website/src/page_writer.zig +63 -0
  64. data/ext/tb_client/tigerbeetle/src/docs_website/src/redirects.zig +47 -0
  65. data/ext/tb_client/tigerbeetle/src/docs_website/src/search_index_writer.zig +28 -0
  66. data/ext/tb_client/tigerbeetle/src/docs_website/src/service_worker_writer.zig +61 -0
  67. data/ext/tb_client/tigerbeetle/src/docs_website/src/single_page_writer.zig +169 -0
  68. data/ext/tb_client/tigerbeetle/src/docs_website/src/website.zig +46 -0
  69. data/ext/tb_client/tigerbeetle/src/ewah.zig +445 -0
  70. data/ext/tb_client/tigerbeetle/src/ewah_benchmark.zig +128 -0
  71. data/ext/tb_client/tigerbeetle/src/ewah_fuzz.zig +171 -0
  72. data/ext/tb_client/tigerbeetle/src/fuzz_tests.zig +179 -0
  73. data/ext/tb_client/tigerbeetle/src/integration_tests.zig +662 -0
  74. data/ext/tb_client/tigerbeetle/src/io/common.zig +155 -0
  75. data/ext/tb_client/tigerbeetle/src/io/darwin.zig +1093 -0
  76. data/ext/tb_client/tigerbeetle/src/io/linux.zig +1880 -0
  77. data/ext/tb_client/tigerbeetle/src/io/test.zig +1005 -0
  78. data/ext/tb_client/tigerbeetle/src/io/windows.zig +1598 -0
  79. data/ext/tb_client/tigerbeetle/src/io.zig +34 -0
  80. data/ext/tb_client/tigerbeetle/src/iops.zig +134 -0
  81. data/ext/tb_client/tigerbeetle/src/list.zig +236 -0
  82. data/ext/tb_client/tigerbeetle/src/lsm/binary_search.zig +848 -0
  83. data/ext/tb_client/tigerbeetle/src/lsm/binary_search_benchmark.zig +179 -0
  84. data/ext/tb_client/tigerbeetle/src/lsm/cache_map.zig +424 -0
  85. data/ext/tb_client/tigerbeetle/src/lsm/cache_map_fuzz.zig +420 -0
  86. data/ext/tb_client/tigerbeetle/src/lsm/compaction.zig +2117 -0
  87. data/ext/tb_client/tigerbeetle/src/lsm/composite_key.zig +182 -0
  88. data/ext/tb_client/tigerbeetle/src/lsm/forest.zig +1119 -0
  89. data/ext/tb_client/tigerbeetle/src/lsm/forest_fuzz.zig +1102 -0
  90. data/ext/tb_client/tigerbeetle/src/lsm/forest_table_iterator.zig +200 -0
  91. data/ext/tb_client/tigerbeetle/src/lsm/groove.zig +1495 -0
  92. data/ext/tb_client/tigerbeetle/src/lsm/k_way_merge.zig +739 -0
  93. data/ext/tb_client/tigerbeetle/src/lsm/k_way_merge_benchmark.zig +166 -0
  94. data/ext/tb_client/tigerbeetle/src/lsm/manifest.zig +754 -0
  95. data/ext/tb_client/tigerbeetle/src/lsm/manifest_level.zig +1294 -0
  96. data/ext/tb_client/tigerbeetle/src/lsm/manifest_level_fuzz.zig +510 -0
  97. data/ext/tb_client/tigerbeetle/src/lsm/manifest_log.zig +1263 -0
  98. data/ext/tb_client/tigerbeetle/src/lsm/manifest_log_fuzz.zig +628 -0
  99. data/ext/tb_client/tigerbeetle/src/lsm/node_pool.zig +247 -0
  100. data/ext/tb_client/tigerbeetle/src/lsm/scan_buffer.zig +116 -0
  101. data/ext/tb_client/tigerbeetle/src/lsm/scan_builder.zig +543 -0
  102. data/ext/tb_client/tigerbeetle/src/lsm/scan_fuzz.zig +938 -0
  103. data/ext/tb_client/tigerbeetle/src/lsm/scan_lookup.zig +293 -0
  104. data/ext/tb_client/tigerbeetle/src/lsm/scan_merge.zig +362 -0
  105. data/ext/tb_client/tigerbeetle/src/lsm/scan_range.zig +99 -0
  106. data/ext/tb_client/tigerbeetle/src/lsm/scan_state.zig +17 -0
  107. data/ext/tb_client/tigerbeetle/src/lsm/scan_tree.zig +1036 -0
  108. data/ext/tb_client/tigerbeetle/src/lsm/schema.zig +617 -0
  109. data/ext/tb_client/tigerbeetle/src/lsm/scratch_memory.zig +84 -0
  110. data/ext/tb_client/tigerbeetle/src/lsm/segmented_array.zig +1500 -0
  111. data/ext/tb_client/tigerbeetle/src/lsm/segmented_array_benchmark.zig +149 -0
  112. data/ext/tb_client/tigerbeetle/src/lsm/segmented_array_fuzz.zig +7 -0
  113. data/ext/tb_client/tigerbeetle/src/lsm/set_associative_cache.zig +865 -0
  114. data/ext/tb_client/tigerbeetle/src/lsm/table.zig +607 -0
  115. data/ext/tb_client/tigerbeetle/src/lsm/table_memory.zig +843 -0
  116. data/ext/tb_client/tigerbeetle/src/lsm/table_value_iterator.zig +105 -0
  117. data/ext/tb_client/tigerbeetle/src/lsm/timestamp_range.zig +40 -0
  118. data/ext/tb_client/tigerbeetle/src/lsm/tree.zig +630 -0
  119. data/ext/tb_client/tigerbeetle/src/lsm/tree_fuzz.zig +933 -0
  120. data/ext/tb_client/tigerbeetle/src/lsm/zig_zag_merge.zig +557 -0
  121. data/ext/tb_client/tigerbeetle/src/message_buffer.zig +469 -0
  122. data/ext/tb_client/tigerbeetle/src/message_bus.zig +1214 -0
  123. data/ext/tb_client/tigerbeetle/src/message_bus_fuzz.zig +936 -0
  124. data/ext/tb_client/tigerbeetle/src/message_pool.zig +343 -0
  125. data/ext/tb_client/tigerbeetle/src/multiversion.zig +2195 -0
  126. data/ext/tb_client/tigerbeetle/src/queue.zig +390 -0
  127. data/ext/tb_client/tigerbeetle/src/repl/completion.zig +201 -0
  128. data/ext/tb_client/tigerbeetle/src/repl/parser.zig +1356 -0
  129. data/ext/tb_client/tigerbeetle/src/repl/terminal.zig +496 -0
  130. data/ext/tb_client/tigerbeetle/src/repl.zig +1034 -0
  131. data/ext/tb_client/tigerbeetle/src/scripts/amqp.zig +973 -0
  132. data/ext/tb_client/tigerbeetle/src/scripts/cfo.zig +1866 -0
  133. data/ext/tb_client/tigerbeetle/src/scripts/changelog.zig +304 -0
  134. data/ext/tb_client/tigerbeetle/src/scripts/ci.zig +227 -0
  135. data/ext/tb_client/tigerbeetle/src/scripts/client_readmes.zig +658 -0
  136. data/ext/tb_client/tigerbeetle/src/scripts/devhub.zig +466 -0
  137. data/ext/tb_client/tigerbeetle/src/scripts/release.zig +1058 -0
  138. data/ext/tb_client/tigerbeetle/src/scripts.zig +105 -0
  139. data/ext/tb_client/tigerbeetle/src/shell.zig +1195 -0
  140. data/ext/tb_client/tigerbeetle/src/stack.zig +260 -0
  141. data/ext/tb_client/tigerbeetle/src/state_machine/auditor.zig +911 -0
  142. data/ext/tb_client/tigerbeetle/src/state_machine/workload.zig +2079 -0
  143. data/ext/tb_client/tigerbeetle/src/state_machine.zig +4872 -0
  144. data/ext/tb_client/tigerbeetle/src/state_machine_fuzz.zig +288 -0
  145. data/ext/tb_client/tigerbeetle/src/state_machine_tests.zig +3128 -0
  146. data/ext/tb_client/tigerbeetle/src/static_allocator.zig +82 -0
  147. data/ext/tb_client/tigerbeetle/src/stdx/bit_set.zig +157 -0
  148. data/ext/tb_client/tigerbeetle/src/stdx/bounded_array.zig +292 -0
  149. data/ext/tb_client/tigerbeetle/src/stdx/debug.zig +65 -0
  150. data/ext/tb_client/tigerbeetle/src/stdx/flags.zig +1414 -0
  151. data/ext/tb_client/tigerbeetle/src/stdx/mlock.zig +92 -0
  152. data/ext/tb_client/tigerbeetle/src/stdx/prng.zig +677 -0
  153. data/ext/tb_client/tigerbeetle/src/stdx/radix.zig +336 -0
  154. data/ext/tb_client/tigerbeetle/src/stdx/ring_buffer.zig +511 -0
  155. data/ext/tb_client/tigerbeetle/src/stdx/sort_test.zig +112 -0
  156. data/ext/tb_client/tigerbeetle/src/stdx/stdx.zig +1160 -0
  157. data/ext/tb_client/tigerbeetle/src/stdx/testing/low_level_hash_vectors.zig +142 -0
  158. data/ext/tb_client/tigerbeetle/src/stdx/testing/snaptest.zig +361 -0
  159. data/ext/tb_client/tigerbeetle/src/stdx/time_units.zig +275 -0
  160. data/ext/tb_client/tigerbeetle/src/stdx/unshare.zig +295 -0
  161. data/ext/tb_client/tigerbeetle/src/stdx/vendored/aegis.zig +436 -0
  162. data/ext/tb_client/tigerbeetle/src/stdx/windows.zig +48 -0
  163. data/ext/tb_client/tigerbeetle/src/stdx/zipfian.zig +402 -0
  164. data/ext/tb_client/tigerbeetle/src/storage.zig +489 -0
  165. data/ext/tb_client/tigerbeetle/src/storage_fuzz.zig +180 -0
  166. data/ext/tb_client/tigerbeetle/src/testing/bench.zig +146 -0
  167. data/ext/tb_client/tigerbeetle/src/testing/cluster/grid_checker.zig +53 -0
  168. data/ext/tb_client/tigerbeetle/src/testing/cluster/journal_checker.zig +61 -0
  169. data/ext/tb_client/tigerbeetle/src/testing/cluster/manifest_checker.zig +76 -0
  170. data/ext/tb_client/tigerbeetle/src/testing/cluster/message_bus.zig +110 -0
  171. data/ext/tb_client/tigerbeetle/src/testing/cluster/network.zig +412 -0
  172. data/ext/tb_client/tigerbeetle/src/testing/cluster/state_checker.zig +331 -0
  173. data/ext/tb_client/tigerbeetle/src/testing/cluster/storage_checker.zig +458 -0
  174. data/ext/tb_client/tigerbeetle/src/testing/cluster.zig +1198 -0
  175. data/ext/tb_client/tigerbeetle/src/testing/exhaustigen.zig +128 -0
  176. data/ext/tb_client/tigerbeetle/src/testing/fixtures.zig +181 -0
  177. data/ext/tb_client/tigerbeetle/src/testing/fuzz.zig +144 -0
  178. data/ext/tb_client/tigerbeetle/src/testing/id.zig +97 -0
  179. data/ext/tb_client/tigerbeetle/src/testing/io.zig +317 -0
  180. data/ext/tb_client/tigerbeetle/src/testing/marks.zig +126 -0
  181. data/ext/tb_client/tigerbeetle/src/testing/packet_simulator.zig +533 -0
  182. data/ext/tb_client/tigerbeetle/src/testing/reply_sequence.zig +154 -0
  183. data/ext/tb_client/tigerbeetle/src/testing/state_machine.zig +389 -0
  184. data/ext/tb_client/tigerbeetle/src/testing/storage.zig +1247 -0
  185. data/ext/tb_client/tigerbeetle/src/testing/table.zig +249 -0
  186. data/ext/tb_client/tigerbeetle/src/testing/time.zig +98 -0
  187. data/ext/tb_client/tigerbeetle/src/testing/tmp_tigerbeetle.zig +212 -0
  188. data/ext/tb_client/tigerbeetle/src/testing/vortex/constants.zig +26 -0
  189. data/ext/tb_client/tigerbeetle/src/testing/vortex/faulty_network.zig +580 -0
  190. data/ext/tb_client/tigerbeetle/src/testing/vortex/java_driver/ci.zig +39 -0
  191. data/ext/tb_client/tigerbeetle/src/testing/vortex/logged_process.zig +214 -0
  192. data/ext/tb_client/tigerbeetle/src/testing/vortex/rust_driver/ci.zig +34 -0
  193. data/ext/tb_client/tigerbeetle/src/testing/vortex/supervisor.zig +766 -0
  194. data/ext/tb_client/tigerbeetle/src/testing/vortex/workload.zig +543 -0
  195. data/ext/tb_client/tigerbeetle/src/testing/vortex/zig_driver.zig +181 -0
  196. data/ext/tb_client/tigerbeetle/src/tidy.zig +1448 -0
  197. data/ext/tb_client/tigerbeetle/src/tigerbeetle/benchmark_driver.zig +227 -0
  198. data/ext/tb_client/tigerbeetle/src/tigerbeetle/benchmark_load.zig +1069 -0
  199. data/ext/tb_client/tigerbeetle/src/tigerbeetle/cli.zig +1422 -0
  200. data/ext/tb_client/tigerbeetle/src/tigerbeetle/inspect.zig +1658 -0
  201. data/ext/tb_client/tigerbeetle/src/tigerbeetle/inspect_integrity.zig +518 -0
  202. data/ext/tb_client/tigerbeetle/src/tigerbeetle/libtb_client.zig +36 -0
  203. data/ext/tb_client/tigerbeetle/src/tigerbeetle/main.zig +646 -0
  204. data/ext/tb_client/tigerbeetle/src/tigerbeetle.zig +958 -0
  205. data/ext/tb_client/tigerbeetle/src/time.zig +236 -0
  206. data/ext/tb_client/tigerbeetle/src/trace/event.zig +745 -0
  207. data/ext/tb_client/tigerbeetle/src/trace/statsd.zig +462 -0
  208. data/ext/tb_client/tigerbeetle/src/trace.zig +556 -0
  209. data/ext/tb_client/tigerbeetle/src/unit_tests.zig +321 -0
  210. data/ext/tb_client/tigerbeetle/src/vopr.zig +1785 -0
  211. data/ext/tb_client/tigerbeetle/src/vortex.zig +101 -0
  212. data/ext/tb_client/tigerbeetle/src/vsr/checkpoint_trailer.zig +473 -0
  213. data/ext/tb_client/tigerbeetle/src/vsr/checksum.zig +208 -0
  214. data/ext/tb_client/tigerbeetle/src/vsr/checksum_benchmark.zig +43 -0
  215. data/ext/tb_client/tigerbeetle/src/vsr/client.zig +768 -0
  216. data/ext/tb_client/tigerbeetle/src/vsr/client_replies.zig +532 -0
  217. data/ext/tb_client/tigerbeetle/src/vsr/client_sessions.zig +338 -0
  218. data/ext/tb_client/tigerbeetle/src/vsr/clock.zig +1019 -0
  219. data/ext/tb_client/tigerbeetle/src/vsr/fault_detector.zig +279 -0
  220. data/ext/tb_client/tigerbeetle/src/vsr/free_set.zig +1381 -0
  221. data/ext/tb_client/tigerbeetle/src/vsr/free_set_fuzz.zig +315 -0
  222. data/ext/tb_client/tigerbeetle/src/vsr/grid.zig +1460 -0
  223. data/ext/tb_client/tigerbeetle/src/vsr/grid_blocks_missing.zig +757 -0
  224. data/ext/tb_client/tigerbeetle/src/vsr/grid_scrubber.zig +797 -0
  225. data/ext/tb_client/tigerbeetle/src/vsr/journal.zig +2586 -0
  226. data/ext/tb_client/tigerbeetle/src/vsr/marzullo.zig +308 -0
  227. data/ext/tb_client/tigerbeetle/src/vsr/message_header.zig +1777 -0
  228. data/ext/tb_client/tigerbeetle/src/vsr/multi_batch.zig +715 -0
  229. data/ext/tb_client/tigerbeetle/src/vsr/multi_batch_fuzz.zig +185 -0
  230. data/ext/tb_client/tigerbeetle/src/vsr/repair_budget.zig +333 -0
  231. data/ext/tb_client/tigerbeetle/src/vsr/replica.zig +12355 -0
  232. data/ext/tb_client/tigerbeetle/src/vsr/replica_format.zig +416 -0
  233. data/ext/tb_client/tigerbeetle/src/vsr/replica_reformat.zig +165 -0
  234. data/ext/tb_client/tigerbeetle/src/vsr/replica_test.zig +2910 -0
  235. data/ext/tb_client/tigerbeetle/src/vsr/routing.zig +1075 -0
  236. data/ext/tb_client/tigerbeetle/src/vsr/superblock.zig +1603 -0
  237. data/ext/tb_client/tigerbeetle/src/vsr/superblock_fuzz.zig +484 -0
  238. data/ext/tb_client/tigerbeetle/src/vsr/superblock_quorums.zig +405 -0
  239. data/ext/tb_client/tigerbeetle/src/vsr/superblock_quorums_fuzz.zig +355 -0
  240. data/ext/tb_client/tigerbeetle/src/vsr/sync.zig +29 -0
  241. data/ext/tb_client/tigerbeetle/src/vsr.zig +1727 -0
  242. data/lib/tb_client/shared_lib.rb +12 -5
  243. data/lib/tigerbeetle/platforms.rb +9 -0
  244. data/lib/tigerbeetle/version.rb +1 -1
  245. data/tigerbeetle.gemspec +22 -5
  246. metadata +242 -3
  247. data/ext/tb_client/pkg.tar.gz +0 -0
@@ -0,0 +1,86 @@
1
+ const Docs = @import("../docs_types.zig").Docs;
2
+
3
+ pub const GoDocs = Docs{
4
+ .directory = "go",
5
+
6
+ .markdown_name = "go",
7
+ .extension = "go",
8
+ .proper_name = "Go",
9
+
10
+ .test_source_path = "",
11
+
12
+ .name = "tigerbeetle-go",
13
+ .description =
14
+ \\The TigerBeetle client for Go.
15
+ \\
16
+ \\[![Go Reference](https://pkg.go.dev/badge/github.com/tigerbeetle/tigerbeetle-go.svg)](https://pkg.go.dev/github.com/tigerbeetle/tigerbeetle-go)
17
+ \\
18
+ \\Make sure to import `github.com/tigerbeetle/tigerbeetle-go`, not
19
+ \\this repo and subdirectory.
20
+ ,
21
+
22
+ .prerequisites =
23
+ \\* Go >= 1.21
24
+ \\
25
+ \\**Additionally on Windows**: you must install [Zig
26
+ \\0.14.1](https://ziglang.org/download/#release-0.14.1) and set the
27
+ \\`CC` environment variable to `zig.exe cc`. Use the full path for
28
+ \\`zig.exe`.
29
+ ,
30
+
31
+ .project_file = "",
32
+ .project_file_name = "",
33
+
34
+ .test_file_name = "main",
35
+
36
+ .install_commands =
37
+ \\go mod init tbtest
38
+ \\go get github.com/tigerbeetle/tigerbeetle-go
39
+ ,
40
+ .run_commands = "go run main.go",
41
+
42
+ .examples = "",
43
+
44
+ .client_object_documentation = "",
45
+
46
+ .create_accounts_documentation =
47
+ \\The `Uint128` fields like `ID`, `UserData128`, `Amount` and
48
+ \\account balances have a few helper functions to make it easier
49
+ \\to convert 128-bit little-endian unsigned integers between
50
+ \\`string`, `math/big.Int`, and `[]byte`.
51
+ \\
52
+ \\See the type [Uint128](https://pkg.go.dev/github.com/tigerbeetle/tigerbeetle-go/pkg/types#Uint128) for more details.
53
+ ,
54
+
55
+ .account_flags_documentation =
56
+ \\To toggle behavior for an account, use the `types.AccountFlags` struct
57
+ \\to combine enum values and generate a `uint16`. Here are a
58
+ \\few examples:
59
+ \\
60
+ \\* `AccountFlags{Linked: true}.ToUint16()`
61
+ \\* `AccountFlags{DebitsMustNotExceedCredits: true}.ToUint16()`
62
+ \\* `AccountFlags{CreditsMustNotExceedDebits: true}.ToUint16()`
63
+ \\* `AccountFlags{History: true}.ToUint16()`
64
+ ,
65
+
66
+ .create_accounts_errors_documentation =
67
+ \\To handle errors you can either 1) exactly match error codes returned
68
+ \\from `client.createAccounts` with enum values in the
69
+ \\`CreateAccountError` object, or you can 2) look up the error code in
70
+ \\the `CreateAccountError` object for a human-readable string.
71
+ ,
72
+
73
+ .create_transfers_documentation = "",
74
+ .create_transfers_errors_documentation = "",
75
+
76
+ .transfer_flags_documentation =
77
+ \\To toggle behavior for an account, use the `types.TransferFlags` struct
78
+ \\to combine enum values and generate a `uint16`. Here are a
79
+ \\few examples:
80
+ \\
81
+ \\* `TransferFlags{Linked: true}.ToUint16()`
82
+ \\* `TransferFlags{Pending: true}.ToUint16()`
83
+ \\* `TransferFlags{PostPendingTransfer: true}.ToUint16()`
84
+ \\* `TransferFlags{VoidPendingTransfer: true}.ToUint16()`
85
+ ,
86
+ };
@@ -0,0 +1,370 @@
1
+ const std = @import("std");
2
+ const vsr = @import("vsr");
3
+ const assert = std.debug.assert;
4
+
5
+ const stdx = vsr.stdx;
6
+ const tb = vsr.tigerbeetle;
7
+
8
+ const type_mappings = .{
9
+ .{ tb.AccountFlags, "AccountFlags" },
10
+ .{ tb.TransferFlags, "TransferFlags" },
11
+ .{ tb.AccountFilterFlags, "AccountFilterFlags" },
12
+ .{ tb.QueryFilterFlags, "QueryFilterFlags" },
13
+ .{ tb.Account, "Account" },
14
+ .{ tb.Transfer, "Transfer" },
15
+ .{ tb.CreateAccountResult, "CreateAccountResult", "Account" },
16
+ .{ tb.CreateTransferResult, "CreateTransferResult", "Transfer" },
17
+ .{ tb.CreateAccountsResult, "AccountEventResult" },
18
+ .{ tb.CreateTransfersResult, "TransferEventResult" },
19
+ .{ tb.AccountFilter, "AccountFilter" },
20
+ .{ tb.AccountBalance, "AccountBalance" },
21
+ .{ tb.QueryFilter, "QueryFilter" },
22
+ .{ tb.ChangeEvent, "ChangeEvent" },
23
+ .{ tb.ChangeEventType, "ChangeEventType", "ChangeEvent" },
24
+ .{ tb.ChangeEventsFilter, "ChangeEventsFilter" },
25
+ };
26
+
27
+ fn go_type(comptime Type: type) []const u8 {
28
+ switch (@typeInfo(Type)) {
29
+ .bool => return "bool",
30
+ .@"enum" => return comptime get_mapped_type_name(Type) orelse
31
+ @compileError("Type " ++ @typeName(Type) ++ " not mapped."),
32
+ .@"struct" => |info| switch (info.layout) {
33
+ .@"packed" => return comptime go_type(std.meta.Int(.unsigned, @bitSizeOf(Type))),
34
+ else => return comptime get_mapped_type_name(Type) orelse
35
+ @compileError("Type " ++ @typeName(Type) ++ " not mapped."),
36
+ },
37
+ .int => |info| {
38
+ assert(info.signedness == .unsigned);
39
+ return switch (info.bits) {
40
+ 1 => "bool",
41
+ 8 => "uint8",
42
+ 16 => "uint16",
43
+ 32 => "uint32",
44
+ 64 => "uint64",
45
+ 128 => "Uint128",
46
+ else => @compileError("invalid int type"),
47
+ };
48
+ },
49
+ else => @compileError("Unhandled type: " ++ @typeName(Type)),
50
+ }
51
+ }
52
+
53
+ fn get_mapped_type_name(comptime Type: type) ?[]const u8 {
54
+ inline for (type_mappings) |type_mapping| {
55
+ if (Type == type_mapping[0]) {
56
+ return type_mapping[1];
57
+ }
58
+ } else return null;
59
+ }
60
+
61
+ fn to_pascal_case(comptime input: []const u8, comptime min_len: ?usize) []const u8 {
62
+ return comptime blk: {
63
+ var len: usize = 0;
64
+ var output = [_]u8{' '} ** (min_len orelse input.len);
65
+ var iterator = std.mem.tokenizeScalar(u8, input, '_');
66
+ while (iterator.next()) |word| {
67
+ assert(word.len > 0);
68
+ if (is_upper_case(word)) {
69
+ _ = std.ascii.upperString(output[len..], word);
70
+ } else {
71
+ output[len] = std.ascii.toUpper(word[0]);
72
+ for (word[1..], 1..) |c, i| output[len + i] = c;
73
+ }
74
+ len += word.len;
75
+ }
76
+
77
+ break :blk stdx.comptime_slice(&output, min_len orelse len);
78
+ };
79
+ }
80
+
81
+ fn calculate_min_len(comptime type_info: anytype) comptime_int {
82
+ comptime {
83
+ var min_len: comptime_int = 0;
84
+ for (type_info.fields) |field| {
85
+ const field_len = to_pascal_case(field.name, null).len;
86
+ if (field_len > min_len) {
87
+ min_len = field_len;
88
+ }
89
+ }
90
+ return min_len;
91
+ }
92
+ }
93
+
94
+ fn is_upper_case(comptime word: []const u8) bool {
95
+ // https://github.com/golang/go/wiki/CodeReviewComments#initialisms
96
+ const initialisms = .{ "id", "ok" };
97
+ inline for (initialisms) |initialism| {
98
+ if (std.ascii.eqlIgnoreCase(initialism, word)) {
99
+ return true;
100
+ }
101
+ } else return false;
102
+ }
103
+
104
+ fn emit_enum(
105
+ buffer: *std.ArrayList(u8),
106
+ comptime Type: type,
107
+ comptime name: []const u8,
108
+ comptime prefix: []const u8,
109
+ comptime tag_type: []const u8,
110
+ ) !void {
111
+ try buffer.writer().print("type {s} {s}\n\n" ++
112
+ "const (\n", .{
113
+ name,
114
+ tag_type,
115
+ });
116
+
117
+ const type_info = @typeInfo(Type).@"enum";
118
+ const min_len = calculate_min_len(type_info);
119
+ inline for (type_info.fields) |field| {
120
+ if (comptime std.mem.startsWith(u8, field.name, "deprecated_")) continue;
121
+ const enum_name = prefix ++ comptime to_pascal_case(field.name, min_len);
122
+ if (type_info.tag_type == u1) {
123
+ try buffer.writer().print("\t{s} {s} = {s}\n", .{
124
+ enum_name,
125
+ name,
126
+ if (@intFromEnum(@field(Type, field.name)) == 1) "true" else "false",
127
+ });
128
+ } else {
129
+ try buffer.writer().print("\t{s} {s} = {d}\n", .{
130
+ enum_name,
131
+ name,
132
+ @intFromEnum(@field(Type, field.name)),
133
+ });
134
+ }
135
+ }
136
+
137
+ try buffer.writer().print(")\n\n" ++
138
+ "func (i {s}) String() string {{\n", .{
139
+ name,
140
+ });
141
+
142
+ if (type_info.tag_type == u1) {
143
+ const enum_zero_name = prefix ++ comptime to_pascal_case(
144
+ @tagName(@as(Type, @enumFromInt(0))),
145
+ null,
146
+ );
147
+ const enum_one_name = prefix ++ comptime to_pascal_case(
148
+ @tagName(@as(Type, @enumFromInt(1))),
149
+ null,
150
+ );
151
+
152
+ try buffer.writer().print("\tif (i == {s}) {{\n" ++
153
+ "\t\treturn \"{s}\"\n" ++
154
+ "\t}} else {{\n" ++
155
+ "\t\treturn \"{s}\"\n" ++
156
+ "\t}}\n", .{
157
+ enum_one_name,
158
+ enum_one_name,
159
+ enum_zero_name,
160
+ });
161
+ } else {
162
+ try buffer.writer().print("\tswitch i {{\n", .{});
163
+
164
+ inline for (type_info.fields) |field| {
165
+ if (comptime std.mem.startsWith(u8, field.name, "deprecated_")) continue;
166
+ const enum_name = prefix ++ comptime to_pascal_case(field.name, null);
167
+ try buffer.writer().print("\tcase {s}:\n" ++
168
+ "\t\treturn \"{s}\"\n", .{
169
+ enum_name,
170
+ enum_name,
171
+ });
172
+ }
173
+
174
+ try buffer.writer().print(
175
+ "\t}}\n" ++
176
+ "\treturn \"{s}(\" + strconv.FormatInt(int64(i+1), 10) + \")\"\n",
177
+ .{name},
178
+ );
179
+ }
180
+
181
+ try buffer.writer().print("}}\n\n", .{});
182
+ }
183
+
184
+ fn emit_packed_struct(
185
+ buffer: *std.ArrayList(u8),
186
+ comptime type_info: anytype,
187
+ comptime name: []const u8,
188
+ comptime int_type: []const u8,
189
+ ) !void {
190
+ try buffer.writer().print("type {s} struct {{\n", .{
191
+ name,
192
+ });
193
+
194
+ const min_len = calculate_min_len(type_info);
195
+ inline for (type_info.fields) |field| {
196
+ if (comptime std.mem.eql(u8, "padding", field.name)) continue;
197
+ try buffer.writer().print("\t{s} {s}\n", .{
198
+ to_pascal_case(field.name, min_len),
199
+ go_type(field.type),
200
+ });
201
+ }
202
+
203
+ // Conversion from struct to packed (e.g. AccountFlags.ToUint16())
204
+ try buffer.writer().print("}}\n\n" ++
205
+ "func (f {s}) To{s}() {s} {{\n" ++
206
+ "\tvar ret {s} = 0\n\n", .{
207
+ name,
208
+ to_pascal_case(int_type, null),
209
+ int_type,
210
+ int_type,
211
+ });
212
+
213
+ inline for (type_info.fields, 0..) |field, i| {
214
+ if (comptime std.mem.eql(u8, "padding", field.name)) continue;
215
+
216
+ try buffer.writer().print("\tif f.{s} {{\n" ++
217
+ "\t\tret |= (1 << {d})\n" ++
218
+ "\t}}\n\n", .{
219
+ to_pascal_case(field.name, null),
220
+ i,
221
+ });
222
+ }
223
+
224
+ try buffer.writer().print("\treturn ret\n" ++
225
+ "}}\n\n", .{});
226
+ }
227
+
228
+ fn emit_struct(
229
+ buffer: *std.ArrayList(u8),
230
+ comptime type_info: anytype,
231
+ comptime name: []const u8,
232
+ ) !void {
233
+ try buffer.writer().print("type {s} struct {{\n", .{
234
+ name,
235
+ });
236
+
237
+ const min_len = calculate_min_len(type_info);
238
+ comptime var flagsField = false;
239
+ inline for (type_info.fields) |field| {
240
+ switch (@typeInfo(field.type)) {
241
+ .array => |array| {
242
+ try buffer.writer().print("\t{s} [{d}]{s}\n", .{
243
+ to_pascal_case(field.name, min_len),
244
+ array.len,
245
+ go_type(array.child),
246
+ });
247
+ },
248
+ else => {
249
+ if (comptime std.mem.eql(u8, field.name, "flags")) {
250
+ flagsField = true;
251
+ }
252
+
253
+ try buffer.writer().print(
254
+ "\t{s} {s}\n",
255
+ .{
256
+ to_pascal_case(field.name, min_len),
257
+ go_type(field.type),
258
+ },
259
+ );
260
+ },
261
+ }
262
+ }
263
+
264
+ try buffer.writer().print("}}\n\n", .{});
265
+
266
+ if (flagsField) {
267
+ const flagType = if (comptime std.mem.eql(u8, name, "Account"))
268
+ tb.AccountFlags
269
+ else if (comptime std.mem.eql(u8, name, "Transfer"))
270
+ tb.TransferFlags
271
+ else if (comptime std.mem.eql(u8, name, "AccountFilter"))
272
+ tb.AccountFilterFlags
273
+ else if (comptime std.mem.eql(u8, name, "QueryFilter"))
274
+ tb.QueryFilterFlags
275
+ else
276
+ unreachable;
277
+ // Conversion from packed to struct (e.g. Account.AccountFlags())
278
+ try buffer.writer().print(
279
+ "func (o {s}) {s}Flags() {s}Flags {{\n" ++
280
+ "\tvar f {s}Flags\n",
281
+ .{
282
+ name,
283
+ name,
284
+ name,
285
+ name,
286
+ },
287
+ );
288
+
289
+ switch (@typeInfo(flagType)) {
290
+ .@"struct" => |info| switch (info.layout) {
291
+ .@"packed" => inline for (info.fields, 0..) |field, i| {
292
+ if (comptime std.mem.eql(u8, "padding", field.name)) continue;
293
+
294
+ try buffer.writer().print("\tf.{s} = ((o.Flags >> {}) & 0x1) == 1\n", .{
295
+ to_pascal_case(field.name, null),
296
+ i,
297
+ });
298
+ },
299
+ else => unreachable,
300
+ },
301
+ else => unreachable,
302
+ }
303
+
304
+ try buffer.writer().print("\treturn f\n" ++
305
+ "}}\n\n", .{});
306
+ }
307
+ }
308
+
309
+ pub fn generate_bindings(buffer: *std.ArrayList(u8)) !void {
310
+ @setEvalBranchQuota(100_000);
311
+
312
+ try buffer.writer().print(
313
+ \\///////////////////////////////////////////////////////
314
+ \\// This file was auto-generated by go_bindings.zig //
315
+ \\// Do not manually modify. //
316
+ \\///////////////////////////////////////////////////////
317
+ \\
318
+ \\package types
319
+ \\
320
+ \\/*
321
+ \\#include "../native/tb_client.h"
322
+ \\*/
323
+ \\import "C"
324
+ \\import "strconv"
325
+ \\
326
+ \\
327
+ , .{});
328
+
329
+ // Emit Go declarations.
330
+ inline for (type_mappings) |type_mapping| {
331
+ const ZigType = type_mapping[0];
332
+ const name = type_mapping[1];
333
+
334
+ switch (@typeInfo(ZigType)) {
335
+ .@"struct" => |info| switch (info.layout) {
336
+ .auto => @compileError(
337
+ "Only packed or extern structs are supported: " ++ @typeName(ZigType),
338
+ ),
339
+ .@"packed" => try emit_packed_struct(
340
+ buffer,
341
+ info,
342
+ name,
343
+ comptime go_type(std.meta.Int(.unsigned, @bitSizeOf(ZigType))),
344
+ ),
345
+ .@"extern" => try emit_struct(buffer, info, name),
346
+ },
347
+ .@"enum" => try emit_enum(
348
+ buffer,
349
+ ZigType,
350
+ name,
351
+ type_mapping[2],
352
+ comptime go_type(std.meta.Int(.unsigned, @bitSizeOf(ZigType))),
353
+ ),
354
+ else => @compileError("Type cannot be represented: " ++ @typeName(ZigType)),
355
+ }
356
+ }
357
+ assert(buffer.pop() == '\n');
358
+ assert(std.mem.endsWith(u8, buffer.items, "\n"));
359
+ assert(!std.mem.endsWith(u8, buffer.items, "\n\n"));
360
+ }
361
+
362
+ pub fn main() !void {
363
+ var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
364
+ defer arena.deinit();
365
+ const allocator = arena.allocator();
366
+
367
+ var buffer = std.ArrayList(u8).init(allocator);
368
+ try generate_bindings(&buffer);
369
+ try std.io.getStdOut().writeAll(buffer.items);
370
+ }