rsloop 0.1.46__tar.gz → 0.1.49__tar.gz

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 (299) hide show
  1. {rsloop-0.1.46 → rsloop-0.1.49}/.github/workflows/anyio.yml +1 -1
  2. {rsloop-0.1.46 → rsloop-0.1.49}/.github/workflows/tests.yml +19 -8
  3. rsloop-0.1.49/.github/workflows/vibeio-native.yml +109 -0
  4. {rsloop-0.1.46 → rsloop-0.1.49}/.github/workflows/wheels.yml +19 -4
  5. rsloop-0.1.49/.python-version +1 -0
  6. {rsloop-0.1.46 → rsloop-0.1.49}/Cargo.lock +79 -23
  7. rsloop-0.1.49/Cargo.toml +110 -0
  8. {rsloop-0.1.46 → rsloop-0.1.49}/PKG-INFO +148 -50
  9. {rsloop-0.1.46 → rsloop-0.1.49}/README.md +147 -49
  10. rsloop-0.1.49/benches/README.md +283 -0
  11. {rsloop-0.1.46 → rsloop-0.1.49}/benches/check_regression.py +45 -2
  12. {rsloop-0.1.46 → rsloop-0.1.49}/benches/compare_event_loops.py +9 -3
  13. rsloop-0.1.49/benches/idle_statistics.py +62 -0
  14. rsloop-0.1.49/benches/runtime.rs +67 -0
  15. rsloop-0.1.49/benches/timer.rs +81 -0
  16. rsloop-0.1.49/benches/vibeio-performance.md +208 -0
  17. {rsloop-0.1.46 → rsloop-0.1.49}/benches/workload_matrix.py +255 -39
  18. {rsloop-0.1.46 → rsloop-0.1.49}/build.rs +0 -17
  19. {rsloop-0.1.46 → rsloop-0.1.49}/docs/development.md +45 -2
  20. {rsloop-0.1.46 → rsloop-0.1.49}/docs/project-structure.md +3 -1
  21. rsloop-0.1.49/docs/vibeio-cleanup.md +2819 -0
  22. rsloop-0.1.49/docs/vibeio-findings.md +1283 -0
  23. {rsloop-0.1.46 → rsloop-0.1.49}/justfile +15 -2
  24. {rsloop-0.1.46 → rsloop-0.1.49}/pyproject.toml +17 -2
  25. {rsloop-0.1.46 → rsloop-0.1.49}/qualirs.toml +11 -0
  26. rsloop-0.1.49/rust-toolchain.toml +4 -0
  27. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/run_rust_tests.py +11 -1
  28. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/test-supported-pythons.sh +3 -1
  29. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/asyncgens.rs +25 -7
  30. {rsloop-0.1.46 → rsloop-0.1.49}/src/build_metadata.rs +1 -1
  31. {rsloop-0.1.46 → rsloop-0.1.49}/src/engine/commands.rs +6 -0
  32. {rsloop-0.1.46 → rsloop-0.1.49}/src/engine/loop_core.rs +72 -8
  33. {rsloop-0.1.46 → rsloop-0.1.49}/src/lib.rs +4 -0
  34. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/buffers.rs +95 -8
  35. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/builder.rs +3 -8
  36. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/core_events.rs +10 -10
  37. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/core_protocol.rs +40 -20
  38. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/core_state.rs +12 -0
  39. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/core_write.rs +0 -2
  40. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/reader.rs +16 -15
  41. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/write_queue.rs +8 -0
  42. rsloop-0.1.49/src/vibeio/blocking/default.rs +69 -0
  43. rsloop-0.1.49/src/vibeio/blocking/mod.rs +146 -0
  44. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/builder.rs +103 -33
  45. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/driver/iocp.rs +610 -94
  46. rsloop-0.1.49/src/vibeio/driver/kqueue.rs +978 -0
  47. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/driver/mio.rs +130 -22
  48. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/driver/mock.rs +45 -2
  49. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/driver/mod.rs +264 -3
  50. rsloop-0.1.49/src/vibeio/driver/uring.rs +1514 -0
  51. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/executor.rs +624 -155
  52. rsloop-0.1.49/src/vibeio/fd_inner.rs +415 -0
  53. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/fs/file.rs +330 -223
  54. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/fs/metadata.rs +17 -47
  55. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/fs/mod.rs +400 -147
  56. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/fs/open_options.rs +20 -33
  57. rsloop-0.1.49/src/vibeio/io/buf.rs +860 -0
  58. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/io/mod.rs +18 -17
  59. rsloop-0.1.49/src/vibeio/io/pipe.rs +467 -0
  60. rsloop-0.1.49/src/vibeio/io/splice.rs +392 -0
  61. rsloop-0.1.49/src/vibeio/io/stdio.rs +297 -0
  62. rsloop-0.1.49/src/vibeio/io/util.rs +594 -0
  63. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/lib.rs +16 -46
  64. rsloop-0.1.49/src/vibeio/net/mod.rs +245 -0
  65. rsloop-0.1.49/src/vibeio/net/tcp/listener.rs +257 -0
  66. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/net/tcp/mod.rs +16 -22
  67. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/net/tcp/stream.rs +144 -242
  68. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/net/udp.rs +196 -208
  69. rsloop-0.1.49/src/vibeio/net/unix/listener.rs +183 -0
  70. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/net/unix/mod.rs +16 -22
  71. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/net/unix/stream.rs +128 -70
  72. rsloop-0.1.49/src/vibeio/op/accept.rs +734 -0
  73. rsloop-0.1.49/src/vibeio/op/accept_unix.rs +346 -0
  74. rsloop-0.1.49/src/vibeio/op/connect.rs +950 -0
  75. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/fsync.rs +3 -4
  76. rsloop-0.1.49/src/vibeio/op/hard_link.rs +165 -0
  77. rsloop-0.1.49/src/vibeio/op/io_util.rs +705 -0
  78. rsloop-0.1.49/src/vibeio/op/mkdir.rs +145 -0
  79. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/mod.rs +25 -36
  80. rsloop-0.1.49/src/vibeio/op/open.rs +212 -0
  81. rsloop-0.1.49/src/vibeio/op/read.rs +422 -0
  82. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/readat.rs +79 -26
  83. rsloop-0.1.49/src/vibeio/op/readv.rs +495 -0
  84. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/recv.rs +139 -46
  85. rsloop-0.1.49/src/vibeio/op/recvfrom.rs +615 -0
  86. rsloop-0.1.49/src/vibeio/op/rename.rs +165 -0
  87. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/send.rs +70 -42
  88. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/sendto.rs +138 -153
  89. rsloop-0.1.49/src/vibeio/op/socket_addr.rs +356 -0
  90. rsloop-0.1.49/src/vibeio/op/splice.rs +508 -0
  91. rsloop-0.1.49/src/vibeio/op/statx.rs +190 -0
  92. rsloop-0.1.49/src/vibeio/op/symlink.rs +164 -0
  93. rsloop-0.1.49/src/vibeio/op/unlink.rs +146 -0
  94. rsloop-0.1.49/src/vibeio/op/waitpid.rs +209 -0
  95. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/write.rs +81 -54
  96. rsloop-0.1.49/src/vibeio/op/writeat.rs +361 -0
  97. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/writev.rs +151 -69
  98. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/process/mod.rs +341 -282
  99. rsloop-0.1.49/src/vibeio/process/reaper.rs +677 -0
  100. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/signal/mod.rs +13 -9
  101. rsloop-0.1.49/src/vibeio/signal/unix.rs +822 -0
  102. rsloop-0.1.49/src/vibeio/signal/windows.rs +344 -0
  103. rsloop-0.1.49/src/vibeio/task.rs +191 -0
  104. rsloop-0.1.49/src/vibeio/test_support.rs +281 -0
  105. rsloop-0.1.49/src/vibeio/time/interval.rs +239 -0
  106. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/time/mod.rs +79 -20
  107. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/time/sleep.rs +104 -29
  108. rsloop-0.1.49/src/vibeio/time/timeout.rs +269 -0
  109. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/timer.rs +215 -29
  110. rsloop-0.1.49/src/vibeio/util/async_wrap.rs +720 -0
  111. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/util/mod.rs +2 -0
  112. rsloop-0.1.49/tests/packages/beanie_test.py +49 -0
  113. rsloop-0.1.49/tests/packages/django_orm_test.py +66 -0
  114. rsloop-0.1.49/tests/packages/edgy_test.py +41 -0
  115. rsloop-0.1.49/tests/packages/ormar_test.py +46 -0
  116. rsloop-0.1.49/tests/packages/piccolo_test.py +40 -0
  117. rsloop-0.1.49/tests/packages/sqlalchemy_test.py +50 -0
  118. rsloop-0.1.49/tests/packages/sqlmodel_test.py +43 -0
  119. rsloop-0.1.49/tests/packages/tortoise_orm_test.py +42 -0
  120. rsloop-0.1.49/tests/test_benchmark_loops.py +141 -0
  121. {rsloop-0.1.46 → rsloop-0.1.49}/tests/test_compat.py +137 -0
  122. rsloop-0.1.49/tests/test_idle_benchmark.py +280 -0
  123. {rsloop-0.1.46 → rsloop-0.1.49}/tests/test_run.py +8 -1
  124. {rsloop-0.1.46 → rsloop-0.1.49}/uv.lock +732 -3
  125. rsloop-0.1.46/Cargo.toml +0 -108
  126. rsloop-0.1.46/benches/README.md +0 -186
  127. rsloop-0.1.46/src/vibeio/blocking/default.rs +0 -37
  128. rsloop-0.1.46/src/vibeio/blocking/mod.rs +0 -57
  129. rsloop-0.1.46/src/vibeio/driver/kqueue.rs +0 -515
  130. rsloop-0.1.46/src/vibeio/driver/uring.rs +0 -825
  131. rsloop-0.1.46/src/vibeio/fd_inner.rs +0 -179
  132. rsloop-0.1.46/src/vibeio/io/buf.rs +0 -469
  133. rsloop-0.1.46/src/vibeio/io/pipe.rs +0 -324
  134. rsloop-0.1.46/src/vibeio/io/splice.rs +0 -164
  135. rsloop-0.1.46/src/vibeio/io/stdio.rs +0 -268
  136. rsloop-0.1.46/src/vibeio/io/util.rs +0 -244
  137. rsloop-0.1.46/src/vibeio/net/mod.rs +0 -55
  138. rsloop-0.1.46/src/vibeio/net/tcp/listener.rs +0 -468
  139. rsloop-0.1.46/src/vibeio/net/unix/listener.rs +0 -145
  140. rsloop-0.1.46/src/vibeio/op/accept.rs +0 -690
  141. rsloop-0.1.46/src/vibeio/op/accept_unix.rs +0 -162
  142. rsloop-0.1.46/src/vibeio/op/connect.rs +0 -531
  143. rsloop-0.1.46/src/vibeio/op/hard_link.rs +0 -93
  144. rsloop-0.1.46/src/vibeio/op/io_util.rs +0 -76
  145. rsloop-0.1.46/src/vibeio/op/mkdir.rs +0 -89
  146. rsloop-0.1.46/src/vibeio/op/open.rs +0 -95
  147. rsloop-0.1.46/src/vibeio/op/read.rs +0 -306
  148. rsloop-0.1.46/src/vibeio/op/readv.rs +0 -366
  149. rsloop-0.1.46/src/vibeio/op/recvfrom.rs +0 -460
  150. rsloop-0.1.46/src/vibeio/op/rename.rs +0 -93
  151. rsloop-0.1.46/src/vibeio/op/splice.rs +0 -127
  152. rsloop-0.1.46/src/vibeio/op/statx.rs +0 -119
  153. rsloop-0.1.46/src/vibeio/op/symlink.rs +0 -92
  154. rsloop-0.1.46/src/vibeio/op/unlink.rs +0 -90
  155. rsloop-0.1.46/src/vibeio/op/waitpid.rs +0 -233
  156. rsloop-0.1.46/src/vibeio/op/writeat.rs +0 -166
  157. rsloop-0.1.46/src/vibeio/process/reaper.rs +0 -332
  158. rsloop-0.1.46/src/vibeio/signal/unix.rs +0 -526
  159. rsloop-0.1.46/src/vibeio/signal/windows.rs +0 -154
  160. rsloop-0.1.46/src/vibeio/task.rs +0 -121
  161. rsloop-0.1.46/src/vibeio/time/interval.rs +0 -145
  162. rsloop-0.1.46/src/vibeio/time/timeout.rs +0 -104
  163. rsloop-0.1.46/src/vibeio/util/async_wrap.rs +0 -470
  164. {rsloop-0.1.46 → rsloop-0.1.49}/.cargo/config.toml +0 -0
  165. {rsloop-0.1.46 → rsloop-0.1.49}/.github/workflows/kani.yml +0 -0
  166. {rsloop-0.1.46 → rsloop-0.1.49}/.github/workflows/mkdocs.yml +0 -0
  167. {rsloop-0.1.46 → rsloop-0.1.49}/.github/workflows/update-version.yml +0 -0
  168. {rsloop-0.1.46 → rsloop-0.1.49}/.gitignore +0 -0
  169. {rsloop-0.1.46 → rsloop-0.1.49}/.vscode/settings.json +0 -0
  170. {rsloop-0.1.46 → rsloop-0.1.49}/LICENSE +0 -0
  171. {rsloop-0.1.46 → rsloop-0.1.49}/docs/examples.md +0 -0
  172. {rsloop-0.1.46 → rsloop-0.1.49}/docs/getting-started.md +0 -0
  173. {rsloop-0.1.46 → rsloop-0.1.49}/docs/how-it-works.md +0 -0
  174. {rsloop-0.1.46 → rsloop-0.1.49}/docs/index.md +0 -0
  175. {rsloop-0.1.46 → rsloop-0.1.49}/docs/rsloop.png +0 -0
  176. {rsloop-0.1.46 → rsloop-0.1.49}/docs/rust-extensions.md +0 -0
  177. {rsloop-0.1.46 → rsloop-0.1.49}/docs/verification.md +0 -0
  178. {rsloop-0.1.46 → rsloop-0.1.49}/examples/01_basics.py +0 -0
  179. {rsloop-0.1.46 → rsloop-0.1.49}/examples/02_fd_and_sockets.py +0 -0
  180. {rsloop-0.1.46 → rsloop-0.1.49}/examples/03_streams.py +0 -0
  181. {rsloop-0.1.46 → rsloop-0.1.49}/examples/04_unix_and_accepted_socket.py +0 -0
  182. {rsloop-0.1.46 → rsloop-0.1.49}/examples/05_pipes_signals_subprocesses.py +0 -0
  183. {rsloop-0.1.46 → rsloop-0.1.49}/examples/README.md +0 -0
  184. {rsloop-0.1.46 → rsloop-0.1.49}/examples/fastapi_service.py +0 -0
  185. {rsloop-0.1.46 → rsloop-0.1.49}/examples/picows_server.py +0 -0
  186. {rsloop-0.1.46 → rsloop-0.1.49}/examples/picows_test.py +0 -0
  187. {rsloop-0.1.46 → rsloop-0.1.49}/examples/wsbench_websockets.py +0 -0
  188. {rsloop-0.1.46 → rsloop-0.1.49}/mkdocs.yml +0 -0
  189. {rsloop-0.1.46 → rsloop-0.1.49}/pyrightconfig.json +0 -0
  190. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/__init__.py +0 -0
  191. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/__init__.pyi +0 -0
  192. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/_bootstrap.py +0 -0
  193. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/_loop.pyi +0 -0
  194. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/_loop_compat.py +0 -0
  195. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/_profile.py +0 -0
  196. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/_run.py +0 -0
  197. {rsloop-0.1.46 → rsloop-0.1.49}/python/rsloop/py.typed +0 -0
  198. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/build-pgo-wheels.sh +0 -0
  199. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/build-wheels.sh +0 -0
  200. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/generate_test_tls_certs.py +0 -0
  201. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/prepare_anyio_rsloop_tests.py +0 -0
  202. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/python-versions.sh +0 -0
  203. {rsloop-0.1.46 → rsloop-0.1.49}/scripts/run_python_tests.py +0 -0
  204. {rsloop-0.1.46 → rsloop-0.1.49}/src/async_event.rs +0 -0
  205. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/asyncio_cache.rs +0 -0
  206. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/connections.rs +0 -0
  207. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/executor.rs +0 -0
  208. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/ffi_helpers.rs +0 -0
  209. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/lifecycle.rs +0 -0
  210. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/methods.rs +0 -0
  211. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/pipes.rs +0 -0
  212. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/pre_exec.rs +0 -0
  213. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/process_handles.rs +0 -0
  214. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/process_spawn.rs +0 -0
  215. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/process_stdio.rs +0 -0
  216. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/servers.rs +0 -0
  217. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/signals.rs +0 -0
  218. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/sock_ops.rs +0 -0
  219. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/socket_connect.rs +0 -0
  220. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/sockets.rs +0 -0
  221. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/spawn_env.rs +0 -0
  222. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/tasks.rs +0 -0
  223. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/tls_params.rs +0 -0
  224. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api/watchers.rs +0 -0
  225. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/loop_api.rs +0 -0
  226. {rsloop-0.1.46 → rsloop-0.1.49}/src/bindings/mod.rs +0 -0
  227. {rsloop-0.1.46 → rsloop-0.1.49}/src/blocking.rs +0 -0
  228. {rsloop-0.1.46 → rsloop-0.1.49}/src/context.rs +0 -0
  229. {rsloop-0.1.46 → rsloop-0.1.49}/src/engine/callbacks.rs +0 -0
  230. {rsloop-0.1.46 → rsloop-0.1.49}/src/engine/dispatcher/timer_entry.rs +0 -0
  231. {rsloop-0.1.46 → rsloop-0.1.49}/src/engine/dispatcher.rs +0 -0
  232. {rsloop-0.1.46 → rsloop-0.1.49}/src/engine/mod.rs +0 -0
  233. {rsloop-0.1.46 → rsloop-0.1.49}/src/errors.rs +0 -0
  234. {rsloop-0.1.46 → rsloop-0.1.49}/src/module_init.rs +0 -0
  235. {rsloop-0.1.46 → rsloop-0.1.49}/src/platform/fd/mod.rs +0 -0
  236. {rsloop-0.1.46 → rsloop-0.1.49}/src/platform/fd/windows.rs +0 -0
  237. {rsloop-0.1.46 → rsloop-0.1.49}/src/platform/mod.rs +0 -0
  238. {rsloop-0.1.46 → rsloop-0.1.49}/src/platform/windows_vibeio.rs +0 -0
  239. {rsloop-0.1.46 → rsloop-0.1.49}/src/profiler.rs +0 -0
  240. {rsloop-0.1.46 → rsloop-0.1.49}/src/python_names.rs +0 -0
  241. {rsloop-0.1.46 → rsloop-0.1.49}/src/rust_async.rs +0 -0
  242. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/mod.rs +0 -0
  243. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/core_events.rs +0 -0
  244. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/core_protocol.rs +0 -0
  245. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/core_state.rs +0 -0
  246. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/mod.rs +0 -0
  247. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/params.rs +0 -0
  248. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/py_pipes.rs +0 -0
  249. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/py_transport.rs +0 -0
  250. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/spawn.rs +0 -0
  251. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/process/worker.rs +0 -0
  252. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/accept.rs +0 -0
  253. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/connect.rs +0 -0
  254. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/fast.rs +0 -0
  255. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/io_targets.rs +0 -0
  256. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/mod.rs +0 -0
  257. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/pipe_transport.rs +0 -0
  258. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/platform.rs +0 -0
  259. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/poll.rs +0 -0
  260. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/protocol.rs +0 -0
  261. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/py_server.rs +0 -0
  262. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/py_transport.rs +0 -0
  263. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/reader_task.rs +0 -0
  264. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/server.rs +0 -0
  265. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/server_core.rs +0 -0
  266. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/server_types.rs +0 -0
  267. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/socket_transport.rs +0 -0
  268. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/stats.rs +0 -0
  269. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/tls_session.rs +0 -0
  270. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/tls_transport.rs +0 -0
  271. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/tuning.rs +0 -0
  272. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/worker.rs +0 -0
  273. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/stream/writer.rs +0 -0
  274. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/tls/material.rs +0 -0
  275. {rsloop-0.1.46 → rsloop-0.1.49}/src/transport/tls/mod.rs +0 -0
  276. {rsloop-0.1.46 → rsloop-0.1.49}/src/verification.rs +0 -0
  277. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/UPSTREAM.md +0 -0
  278. {rsloop-0.1.46 → rsloop-0.1.49}/src/vibeio/op/readiness.rs +0 -0
  279. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/_smoke.py +0 -0
  280. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/aiohttp_test.py +0 -0
  281. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/anyio_test.py +0 -0
  282. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/daphne_test.py +0 -0
  283. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/django_asgi_test.py +0 -0
  284. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/falcon_test.py +0 -0
  285. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/fastapi_test.py +0 -0
  286. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/faststream_test.py +0 -0
  287. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/hypercorn_test.py +0 -0
  288. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/litestar_granian_test.py +0 -0
  289. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/litestar_test.py +0 -0
  290. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/mangum_test.py +0 -0
  291. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/quart_test.py +0 -0
  292. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/sanic_test.py +0 -0
  293. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/starlette_test.py +0 -0
  294. {rsloop-0.1.46 → rsloop-0.1.49}/tests/packages/uvicorn_test.py +0 -0
  295. {rsloop-0.1.46 → rsloop-0.1.49}/tests/proptest-regressions/transport/stream/fast.txt +0 -0
  296. {rsloop-0.1.46 → rsloop-0.1.49}/tests/test_free_threading.py +0 -0
  297. {rsloop-0.1.46 → rsloop-0.1.49}/tests/test_public_api.py +0 -0
  298. {rsloop-0.1.46 → rsloop-0.1.49}/tests/test_stream_reader.py +0 -0
  299. {rsloop-0.1.46 → rsloop-0.1.49}/tests/test_tls.py +0 -0
@@ -71,7 +71,7 @@ jobs:
71
71
  - name: Set up Rust
72
72
  uses: dtolnay/rust-toolchain@stable
73
73
  with:
74
- toolchain: 1.95.0
74
+ toolchain: "1.98.1"
75
75
 
76
76
  - name: Cache Cargo registry
77
77
  uses: Swatinem/rust-cache@v2
@@ -25,9 +25,17 @@ concurrency:
25
25
 
26
26
  jobs:
27
27
  rust-test:
28
- name: rust tests
28
+ name: rust tests (${{ matrix.features }})
29
29
  runs-on: ubuntu-latest
30
30
  timeout-minutes: 15
31
+ strategy:
32
+ fail-fast: false
33
+ matrix:
34
+ include:
35
+ - features: default
36
+ test_args: ""
37
+ - features: all
38
+ test_args: "--all-features"
31
39
  steps:
32
40
  - name: Check out repository
33
41
  uses: actions/checkout@v6
@@ -42,7 +50,7 @@ jobs:
42
50
  - name: Set up Rust
43
51
  uses: dtolnay/rust-toolchain@stable
44
52
  with:
45
- toolchain: 1.95.0
53
+ toolchain: "1.98.1"
46
54
 
47
55
  - name: Cache Cargo registry
48
56
  uses: Swatinem/rust-cache@v2
@@ -51,10 +59,13 @@ jobs:
51
59
  run: python3 scripts/generate_test_tls_certs.py
52
60
 
53
61
  - name: Run Rust tests
54
- run: python3 scripts/run_rust_tests.py
62
+ run: python3 scripts/run_rust_tests.py ${{ matrix.test_args }}
63
+
64
+ vibeio-native:
65
+ uses: ./.github/workflows/vibeio-native.yml
55
66
 
56
67
  clippy:
57
- name: clippy (pedantic)
68
+ name: clippy (risk-focused)
58
69
  runs-on: ubuntu-latest
59
70
  timeout-minutes: 15
60
71
  steps:
@@ -71,14 +82,14 @@ jobs:
71
82
  - name: Set up Rust
72
83
  uses: dtolnay/rust-toolchain@stable
73
84
  with:
74
- toolchain: 1.95.0
85
+ toolchain: "1.98.1"
75
86
  components: clippy
76
87
 
77
88
  - name: Cache Cargo registry
78
89
  uses: Swatinem/rust-cache@v2
79
90
 
80
91
  - name: Run Clippy
81
- run: cargo clippy --all-targets --all-features -- -D warnings
92
+ run: cargo clippy --all-targets --all-features --locked -- -D warnings
82
93
 
83
94
  type-check:
84
95
  name: pyright
@@ -135,7 +146,7 @@ jobs:
135
146
  - name: Set up Rust
136
147
  uses: dtolnay/rust-toolchain@stable
137
148
  with:
138
- toolchain: 1.95.0
149
+ toolchain: "1.98.1"
139
150
 
140
151
  - name: Cache Cargo registry
141
152
  uses: Swatinem/rust-cache@v2
@@ -245,7 +256,7 @@ jobs:
245
256
  - name: Set up Rust
246
257
  uses: dtolnay/rust-toolchain@stable
247
258
  with:
248
- toolchain: 1.95.0
259
+ toolchain: "1.98.1"
249
260
 
250
261
  - name: Cache Cargo registry
251
262
  uses: Swatinem/rust-cache@v2
@@ -0,0 +1,109 @@
1
+ name: Vibeio native tests
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ repetitions:
7
+ description: "All-feature test repetitions per native platform"
8
+ type: choice
9
+ default: "3"
10
+ options: ["1", "3", "10"]
11
+ isolated_features:
12
+ description: "Also lint and test each feature independently"
13
+ type: boolean
14
+ default: true
15
+ workflow_call:
16
+ inputs:
17
+ repetitions:
18
+ type: string
19
+ default: "1"
20
+ isolated_features:
21
+ type: boolean
22
+ default: true
23
+
24
+ permissions:
25
+ contents: read
26
+
27
+ jobs:
28
+ native:
29
+ name: vibeio (${{ matrix.os }})
30
+ runs-on: ${{ matrix.os }}
31
+ timeout-minutes: 30
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ os: [ubuntu-latest, windows-latest, macos-latest]
36
+ defaults:
37
+ run:
38
+ shell: bash
39
+ env:
40
+ RUST_BACKTRACE: "1"
41
+ CARGO_TERM_COLOR: never
42
+ REPETITIONS: ${{ inputs.repetitions }}
43
+ steps:
44
+ - name: Check out repository
45
+ uses: actions/checkout@v6
46
+ with:
47
+ persist-credentials: false
48
+
49
+ - name: Set up Rust
50
+ uses: dtolnay/rust-toolchain@stable
51
+ with:
52
+ toolchain: "1.98.1"
53
+ components: clippy, rustfmt
54
+
55
+ - name: Cache runtime harness build
56
+ uses: Swatinem/rust-cache@v2
57
+ with:
58
+ workspaces: tools/vibeio-check
59
+
60
+ - name: Record native environment
61
+ run: |
62
+ mkdir -p target/vibeio-native-logs
63
+ case "$REPETITIONS" in
64
+ 1|3|10) ;;
65
+ *) echo "Unsupported repetition count: $REPETITIONS"; exit 1 ;;
66
+ esac
67
+ {
68
+ git rev-parse HEAD
69
+ rustc -Vv
70
+ cargo -V
71
+ uname -a
72
+ } 2>&1 | tee target/vibeio-native-logs/environment.log
73
+
74
+ - name: Check formatting and documentation
75
+ env:
76
+ RUSTDOCFLAGS: -D warnings
77
+ run: |
78
+ cargo fmt --manifest-path tools/vibeio-check/Cargo.toml --all -- --check
79
+ cargo doc --manifest-path tools/vibeio-check/Cargo.toml --all-features --no-deps --locked 2>&1 | tee target/vibeio-native-logs/documentation.log
80
+
81
+ - name: Lint native all-feature build
82
+ run: cargo clippy --manifest-path tools/vibeio-check/Cargo.toml --all-targets --all-features --locked -- -D warnings 2>&1 | tee target/vibeio-native-logs/clippy.log
83
+
84
+ - name: Inventory native tests
85
+ run: cargo test --manifest-path tools/vibeio-check/Cargo.toml --all-features --locked -- --list 2>&1 | tee target/vibeio-native-logs/test-inventory.log
86
+
87
+ - name: Run native all-feature tests repeatedly
88
+ run: |
89
+ for ((iteration=1; iteration<=REPETITIONS; iteration++)); do
90
+ cargo test --manifest-path tools/vibeio-check/Cargo.toml --all-features --locked -- --nocapture 2>&1 | tee "target/vibeio-native-logs/all-features-${iteration}.log"
91
+ done
92
+
93
+ - name: Check isolated features
94
+ if: ${{ inputs.isolated_features }}
95
+ run: |
96
+ for feature in '' fs process signal pipe stdio splice blocking-default; do
97
+ label="${feature:-default}"
98
+ cargo clippy --manifest-path tools/vibeio-check/Cargo.toml --all-targets --no-default-features --features "$feature" --locked -- -D warnings 2>&1 | tee "target/vibeio-native-logs/clippy-${label}.log"
99
+ cargo test --manifest-path tools/vibeio-check/Cargo.toml --no-default-features --features "$feature" --locked -- --nocapture 2>&1 | tee "target/vibeio-native-logs/tests-${label}.log"
100
+ done
101
+
102
+ - name: Upload native test evidence
103
+ if: always()
104
+ uses: actions/upload-artifact@v4
105
+ with:
106
+ name: vibeio-native-${{ matrix.os }}-${{ github.run_attempt }}
107
+ path: target/vibeio-native-logs/
108
+ if-no-files-found: warn
109
+ retention-days: 14
@@ -5,6 +5,12 @@ on:
5
5
  tags:
6
6
  - "v*"
7
7
  workflow_dispatch:
8
+ inputs:
9
+ pgo:
10
+ description: "Build wheels with profile-guided optimization (slower)"
11
+ type: boolean
12
+ required: false
13
+ default: false
8
14
 
9
15
  permissions:
10
16
  contents: read
@@ -62,8 +68,11 @@ jobs:
62
68
  - name: Set up Rust
63
69
  uses: dtolnay/rust-toolchain@stable
64
70
  with:
65
- toolchain: stable
66
- components: llvm-tools-preview
71
+ toolchain: "1.98.1"
72
+
73
+ - name: Install LLVM tools for PGO
74
+ if: github.event_name == 'workflow_dispatch' && inputs.pgo
75
+ run: rustup component add llvm-tools-preview
67
76
 
68
77
  - name: Cache Cargo registry and target
69
78
  uses: Swatinem/rust-cache@v2
@@ -73,7 +82,13 @@ jobs:
73
82
  shell: bash
74
83
  env:
75
84
  RSLOOP_PYTHON_VERSIONS: ${{ matrix.python_versions }}
76
- run: scripts/build-pgo-wheels.sh --out dist --target "${{ matrix.rust_target }}"
85
+ PGO_ENABLED: ${{ github.event_name == 'workflow_dispatch' && inputs.pgo }}
86
+ run: |
87
+ if [[ "$PGO_ENABLED" == "true" ]]; then
88
+ scripts/build-pgo-wheels.sh --out dist --target "${{ matrix.rust_target }}"
89
+ else
90
+ scripts/build-wheels.sh --out dist --target "${{ matrix.rust_target }}"
91
+ fi
77
92
 
78
93
  - name: Upload wheel artifacts
79
94
  uses: actions/upload-artifact@v4
@@ -103,7 +118,7 @@ jobs:
103
118
  - name: Set up Rust
104
119
  uses: dtolnay/rust-toolchain@stable
105
120
  with:
106
- toolchain: stable
121
+ toolchain: "1.98.1"
107
122
 
108
123
  - name: Cache Cargo registry and target
109
124
  uses: Swatinem/rust-cache@v2
@@ -0,0 +1 @@
1
+ 3.14.7
@@ -4,9 +4,9 @@ version = 4
4
4
 
5
5
  [[package]]
6
6
  name = "aho-corasick"
7
- version = "1.1.4"
7
+ version = "1.1.5"
8
8
  source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
9
+ checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba"
10
10
  dependencies = [
11
11
  "memchr",
12
12
  ]
@@ -228,9 +228,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
228
228
 
229
229
  [[package]]
230
230
  name = "cc"
231
- version = "1.2.65"
231
+ version = "1.4.4"
232
232
  source = "registry+https://github.com/rust-lang/crates.io-index"
233
- checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96"
233
+ checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273"
234
234
  dependencies = [
235
235
  "find-msvc-tools",
236
236
  "jobserver",
@@ -353,9 +353,9 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
353
353
 
354
354
  [[package]]
355
355
  name = "find-msvc-tools"
356
- version = "0.1.9"
356
+ version = "0.1.11"
357
357
  source = "registry+https://github.com/rust-lang/crates.io-index"
358
- checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
358
+ checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890"
359
359
 
360
360
  [[package]]
361
361
  name = "fs_extra"
@@ -393,6 +393,17 @@ version = "0.3.33"
393
393
  source = "registry+https://github.com/rust-lang/crates.io-index"
394
394
  checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7"
395
395
 
396
+ [[package]]
397
+ name = "futures-executor"
398
+ version = "0.3.33"
399
+ source = "registry+https://github.com/rust-lang/crates.io-index"
400
+ checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458"
401
+ dependencies = [
402
+ "futures-core",
403
+ "futures-task",
404
+ "futures-util",
405
+ ]
406
+
396
407
  [[package]]
397
408
  name = "futures-io"
398
409
  version = "0.3.33"
@@ -486,10 +497,21 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
486
497
  dependencies = [
487
498
  "cfg-if",
488
499
  "libc",
489
- "r-efi",
500
+ "r-efi 5.3.0",
490
501
  "wasip2",
491
502
  ]
492
503
 
504
+ [[package]]
505
+ name = "getrandom"
506
+ version = "0.4.3"
507
+ source = "registry+https://github.com/rust-lang/crates.io-index"
508
+ checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
509
+ dependencies = [
510
+ "cfg-if",
511
+ "libc",
512
+ "r-efi 6.0.0",
513
+ ]
514
+
493
515
  [[package]]
494
516
  name = "gloo-timers"
495
517
  version = "0.3.0"
@@ -527,11 +549,11 @@ dependencies = [
527
549
 
528
550
  [[package]]
529
551
  name = "jobserver"
530
- version = "0.1.34"
552
+ version = "0.1.35"
531
553
  source = "registry+https://github.com/rust-lang/crates.io-index"
532
- checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
554
+ checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3"
533
555
  dependencies = [
534
- "getrandom 0.3.4",
556
+ "getrandom 0.4.3",
535
557
  "libc",
536
558
  ]
537
559
 
@@ -575,9 +597,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
575
597
 
576
598
  [[package]]
577
599
  name = "log"
578
- version = "0.4.33"
600
+ version = "0.4.34"
579
601
  source = "registry+https://github.com/rust-lang/crates.io-index"
580
- checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
602
+ checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
581
603
  dependencies = [
582
604
  "value-bag",
583
605
  ]
@@ -640,6 +662,16 @@ dependencies = [
640
662
  "autocfg",
641
663
  ]
642
664
 
665
+ [[package]]
666
+ name = "num_cpus"
667
+ version = "1.17.0"
668
+ source = "registry+https://github.com/rust-lang/crates.io-index"
669
+ checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
670
+ dependencies = [
671
+ "hermit-abi",
672
+ "libc",
673
+ ]
674
+
643
675
  [[package]]
644
676
  name = "once_cell"
645
677
  version = "1.21.4"
@@ -826,6 +858,12 @@ version = "5.3.0"
826
858
  source = "registry+https://github.com/rust-lang/crates.io-index"
827
859
  checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
828
860
 
861
+ [[package]]
862
+ name = "r-efi"
863
+ version = "6.0.0"
864
+ source = "registry+https://github.com/rust-lang/crates.io-index"
865
+ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
866
+
829
867
  [[package]]
830
868
  name = "rand"
831
869
  version = "0.9.5"
@@ -866,9 +904,9 @@ dependencies = [
866
904
 
867
905
  [[package]]
868
906
  name = "regex-automata"
869
- version = "0.4.14"
907
+ version = "0.4.18"
870
908
  source = "registry+https://github.com/rust-lang/crates.io-index"
871
- checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
909
+ checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2"
872
910
  dependencies = [
873
911
  "aho-corasick",
874
912
  "memchr",
@@ -897,19 +935,23 @@ dependencies = [
897
935
 
898
936
  [[package]]
899
937
  name = "rsloop"
900
- version = "0.1.46"
938
+ version = "0.1.49"
901
939
  dependencies = [
940
+ "async-channel 2.5.0",
902
941
  "async-io",
903
942
  "async-std",
904
943
  "crossbeam-channel",
905
944
  "crossbeam-queue",
945
+ "errno",
906
946
  "futures",
907
947
  "futures-util",
908
948
  "io-uring",
909
949
  "libc",
910
950
  "memchr",
911
951
  "mio",
952
+ "once_cell",
912
953
  "oneshot",
954
+ "pin-project-lite",
913
955
  "proptest",
914
956
  "pyo3",
915
957
  "pyo3-async-runtimes",
@@ -917,11 +959,13 @@ dependencies = [
917
959
  "rustls",
918
960
  "rustls-native-certs",
919
961
  "rustls-pemfile",
962
+ "rusty_pool",
920
963
  "signal-hook",
921
964
  "slab",
922
965
  "socket2",
923
966
  "tokio",
924
967
  "tracy-client",
968
+ "tracy-client-sys",
925
969
  "windows-sys 0.61.2",
926
970
  ]
927
971
 
@@ -997,9 +1041,21 @@ dependencies = [
997
1041
 
998
1042
  [[package]]
999
1043
  name = "rustversion"
1000
- version = "1.0.22"
1044
+ version = "1.0.23"
1045
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1046
+ checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
1047
+
1048
+ [[package]]
1049
+ name = "rusty_pool"
1050
+ version = "0.7.0"
1001
1051
  source = "registry+https://github.com/rust-lang/crates.io-index"
1002
- checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
1052
+ checksum = "4ed36cdb20de66d89a17ea04b8883fc7a386f2cf877aaedca5005583ce4876ff"
1053
+ dependencies = [
1054
+ "crossbeam-channel",
1055
+ "futures-channel",
1056
+ "futures-executor",
1057
+ "num_cpus",
1058
+ ]
1003
1059
 
1004
1060
  [[package]]
1005
1061
  name = "schannel"
@@ -1121,9 +1177,9 @@ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
1121
1177
 
1122
1178
  [[package]]
1123
1179
  name = "thread_local"
1124
- version = "1.1.9"
1180
+ version = "1.1.10"
1125
1181
  source = "registry+https://github.com/rust-lang/crates.io-index"
1126
- checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
1182
+ checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070"
1127
1183
  dependencies = [
1128
1184
  "cfg-if",
1129
1185
  ]
@@ -1189,9 +1245,9 @@ dependencies = [
1189
1245
 
1190
1246
  [[package]]
1191
1247
  name = "tracy-client"
1192
- version = "0.18.4"
1248
+ version = "0.19.0"
1193
1249
  source = "registry+https://github.com/rust-lang/crates.io-index"
1194
- checksum = "a4f6fc3baeac5d86ab90c772e9e30620fc653bf1864295029921a15ef478e6a5"
1250
+ checksum = "d93fd676d8946eaeaff4881d26d2240a8d106fcaccbd47cb9f1389e3561ba490"
1195
1251
  dependencies = [
1196
1252
  "loom",
1197
1253
  "once_cell",
@@ -1200,9 +1256,9 @@ dependencies = [
1200
1256
 
1201
1257
  [[package]]
1202
1258
  name = "tracy-client-sys"
1203
- version = "0.28.0"
1259
+ version = "0.30.0"
1204
1260
  source = "registry+https://github.com/rust-lang/crates.io-index"
1205
- checksum = "c5f7c95348f20c1c913d72157b3c6dee6ea3e30b3d19502c5a7f6d3f160dacbf"
1261
+ checksum = "eef8a023d2b19f44e430da334f7dfb5e5db219bb83e2b4f56a09c1cb12abe915"
1206
1262
  dependencies = [
1207
1263
  "cc",
1208
1264
  "windows-targets",
@@ -0,0 +1,110 @@
1
+ [package]
2
+ name = "rsloop"
3
+ version = "0.1.49"
4
+ edition = "2024"
5
+ description = "An event loop for asyncio written in Rust"
6
+ license = "Apache-2.0"
7
+ readme = "README.md"
8
+ repository = "https://github.com/RustedBytes/rsloop"
9
+ homepage = "https://github.com/RustedBytes/rsloop"
10
+ documentation = "https://github.com/RustedBytes/rsloop#readme"
11
+
12
+ [lib]
13
+ name = "rsloop"
14
+ crate-type = ["cdylib", "rlib"]
15
+
16
+ [features]
17
+ default = []
18
+ profiler = ["dep:tracy-client", "dep:tracy-client-sys"]
19
+ # Embedded-runtime modules are opt-in; production wheels retain the default
20
+ # networking/timer build unless a feature is explicitly requested.
21
+ fs = []
22
+ process = ["dep:async-channel"]
23
+ signal = ["dep:once_cell", "dep:errno"]
24
+ pipe = []
25
+ stdio = []
26
+ splice = []
27
+ blocking-default = ["dep:rusty_pool"]
28
+
29
+ [dependencies]
30
+ errno = { version = "0.3", optional = true }
31
+ async-channel = { version = "2", optional = true }
32
+ async-io = "2"
33
+ async-std = "1"
34
+ crossbeam-channel = "0.5"
35
+ crossbeam-queue = "0.3"
36
+ futures = { version = "0.3", default-features = false, features = ["std"] }
37
+ futures-util = "0.3"
38
+ libc = "0.2"
39
+ memchr = "2"
40
+ mio = "1"
41
+ oneshot = { version = "0.2", features = ["async", "std"] }
42
+ pin-project-lite = "0.2"
43
+ once_cell = { version = "1", optional = true }
44
+ pyo3 = { version = "0.29.2" }
45
+ pyo3-async-runtimes = { version = "0.29", features = ["async-std-runtime"] }
46
+ rustls = "0.23"
47
+ rustls-native-certs = "0.8"
48
+ rustls-pemfile = "2"
49
+ rusty_pool = { version = "0.7", default-features = false, optional = true }
50
+ signal-hook = "0.4"
51
+ slab = "0.4"
52
+ socket2 = "0.6"
53
+ tokio = { version = "1", default-features = false, features = ["io-util"] }
54
+ tracy-client = { version = "0.19", default-features = false, features = ["enable", "only-localhost", "sampling"], optional = true }
55
+ # tracy-client 0.19 accepts older sys releases whose generated API is
56
+ # incompatible with the wrapper. Keep the matching bindings selected.
57
+ tracy-client-sys = { version = "=0.30.0", default-features = false, optional = true }
58
+ [target.'cfg(target_os = "linux")'.dependencies]
59
+ io-uring = "0.7"
60
+
61
+ [target.'cfg(unix)'.dependencies]
62
+ mio = { version = "1", features = ["os-poll", "os-ext"] }
63
+
64
+ [target.'cfg(windows)'.dependencies]
65
+ windows-sys = { version = "0.61", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Wdk_System_IO", "Wdk_System_SystemServices", "Win32_Foundation", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Pipes", "Win32_System_SystemInformation", "Win32_System_Threading"] }
66
+
67
+ [build-dependencies]
68
+ pyo3-build-config = "0.29.2"
69
+
70
+ [dev-dependencies]
71
+ proptest = { version = "1", default-features = false, features = ["std"] }
72
+
73
+ [lints.clippy]
74
+ # Enforce bug, concurrency, and performance checks rather than style preferences.
75
+ correctness = { level = "deny", priority = -1 }
76
+ suspicious = { level = "warn", priority = -1 }
77
+ perf = { level = "warn", priority = -1 }
78
+ complexity = { level = "warn", priority = -1 }
79
+ style = { level = "allow", priority = -1 }
80
+ pedantic = { level = "allow", priority = -1 }
81
+ # Keep safety checks even when they belong to an otherwise disabled group.
82
+ missing_safety_doc = "warn"
83
+ cast_ptr_alignment = "warn"
84
+ await_holding_lock = "warn"
85
+ await_holding_refcell_ref = "warn"
86
+
87
+ [lints.rust]
88
+ unexpected_cfgs = { level = "warn", check-cfg = ["cfg(kani)", "cfg(musl_v1_2_3)", "cfg(syscall_accept4)", "cfg(feature, values(\"blocking-default\", \"fs\", \"pipe\", \"process\", \"signal\", \"splice\", \"stdio\"))"] }
89
+
90
+ [package.metadata.kani.flags]
91
+ # Force every proof that reaches a loop to state and review its own bound.
92
+ default-unwind = "1"
93
+
94
+ [profile.release]
95
+ opt-level = 3
96
+ lto = "fat"
97
+ codegen-units = 1
98
+ incremental = false
99
+ # strip = true
100
+
101
+ [profile.bench]
102
+ inherits = "release"
103
+
104
+ [[bench]]
105
+ name = "runtime"
106
+ harness = false
107
+
108
+ [[bench]]
109
+ name = "timer"
110
+ harness = false