mq-bridge-py-basic 0.4.5__tar.gz → 0.4.6__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 (293) hide show
  1. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/CLAUDE.md +3 -1
  2. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/Cargo.lock +360 -8
  3. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/Cargo.toml +12 -2
  4. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/PKG-INFO +1 -1
  5. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/docs/CONFIGURATION.md +7 -0
  6. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/docs/REFERENCE.md +169 -14
  7. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/mq-bridge.schema.json +60 -10
  8. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/mq_bridge/config.py +2 -0
  9. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/mq_bridge/config.pyi +17 -2
  10. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/scripts/gen_config_types.py +22 -3
  11. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/http/publisher.rs +3 -1
  12. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/http/tests.rs +71 -0
  13. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mod.rs +522 -7
  14. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mongodb/consumer.rs +84 -29
  15. mq_bridge_py_basic-0.4.6/src/endpoints/structural/fanout.rs +615 -0
  16. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/structural/request.rs +73 -7
  17. mq_bridge_py_basic-0.4.6/src/endpoints/structural/switch.rs +645 -0
  18. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/deduplication.rs +61 -8
  19. mq_bridge_py_basic-0.4.6/src/middleware/deferred_commit.rs +170 -0
  20. mq_bridge_py_basic-0.4.6/src/middleware/filter.rs +1278 -0
  21. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/mod.rs +11 -0
  22. mq_bridge_py_basic-0.4.6/src/middleware/raw_json.rs +31 -0
  23. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/transform/compiled.rs +84 -3
  24. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/transform/error.rs +4 -0
  25. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/transform/schema.rs +0 -34
  26. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/transform/tests.rs +48 -0
  27. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/models/builders.rs +2 -2
  28. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/models/defaults.rs +1 -0
  29. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/models/serde_support.rs +1 -0
  30. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/models/tests.rs +102 -0
  31. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/models.rs +77 -6
  32. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/route.rs +355 -29
  33. mq_bridge_py_basic-0.4.5/src/endpoints/structural/fanout.rs +0 -285
  34. mq_bridge_py_basic-0.4.5/src/endpoints/structural/switch.rs +0 -264
  35. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  36. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  37. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  38. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/dependabot.yml +0 -0
  39. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/benchmark.yml +0 -0
  40. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/ci.yml +0 -0
  41. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/ibm-mq.yml +0 -0
  42. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/node.yml +0 -0
  43. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/publish-node.yml +0 -0
  44. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/publish-python.yml +0 -0
  45. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/python.yml +0 -0
  46. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/release.yml +0 -0
  47. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.github/workflows/test-matrix.yml +0 -0
  48. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/.gitignore +0 -0
  49. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/CHANGELOG.md +0 -0
  50. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/CONTRIBUTING.md +0 -0
  51. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/LICENSE +0 -0
  52. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/LICENSE.python +0 -0
  53. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/README.md +0 -0
  54. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/SECURITY.md +0 -0
  55. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/benches/ETL_BENCHMARKS.md +0 -0
  56. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/benches/performance_bench.rs +0 -0
  57. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/benches/router_bench.rs +0 -0
  58. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/benches/zeromq_backends.rs +0 -0
  59. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/bindings-common/Cargo.toml +0 -0
  60. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/bindings-common/src/lib.rs +0 -0
  61. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/bindings-common/src/logging.rs +0 -0
  62. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/build.rs +0 -0
  63. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/deny.toml +0 -0
  64. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/docs/ARCHITECTURE.md +0 -0
  65. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/docs/DELIVERY.md +0 -0
  66. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/docs/EXTENDING.md +0 -0
  67. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/docs/PLUGINS.md +0 -0
  68. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/examples/ipc_worker_queue.yaml +0 -0
  69. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/mq_bridge/__init__.py +0 -0
  70. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/mq_bridge/__init__.pyi +0 -0
  71. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/mq_bridge/plugin_packaging.py +0 -0
  72. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/mq_bridge/py.typed +0 -0
  73. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/package-lock.json +0 -0
  74. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/pyproject.toml +0 -0
  75. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/Cargo.toml +0 -0
  76. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/LICENSE.python +0 -0
  77. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/README.md +0 -0
  78. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/analysis/bench_http_native.py +0 -0
  79. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/example.py +0 -0
  80. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/examples/bench_memory.py +0 -0
  81. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
  82. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/examples/consume_pull.py +0 -0
  83. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/examples/dlt_source.py +0 -0
  84. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/examples/json_route.py +0 -0
  85. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/examples/memory.yaml +0 -0
  86. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/examples/raw_route.py +0 -0
  87. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/pyproject-basic.toml +0 -0
  88. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/pyproject-reduced.toml +0 -0
  89. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/src/lib.rs +0 -0
  90. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_config_types.py +0 -0
  91. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_custom_endpoint.py +0 -0
  92. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_logging.py +0 -0
  93. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_packaging.py +0 -0
  94. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
  95. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_plugin_package.py +0 -0
  96. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_public_api.py +0 -0
  97. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/tests/test_routes.py +0 -0
  98. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/python/mq-bridge-py/uv.lock +0 -0
  99. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/analysis/benches/metadata_bench.rs +0 -0
  100. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/analysis/debug_ibm_mq_tls.rs +0 -0
  101. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
  102. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/analysis/http/http_flamegraph.py +0 -0
  103. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/analysis/http/mq_bridge_http_profile.rs +0 -0
  104. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/analysis/http/run_http_ladder.sh +0 -0
  105. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/ci/format_bench_output.sh +0 -0
  106. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/httparena/README.md +0 -0
  107. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
  108. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
  109. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
  110. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
  111. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
  112. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
  113. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
  114. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/README.md +0 -0
  115. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/postgres.yml +0 -0
  116. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/seed.sql +0 -0
  117. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/techempower/verify.sh +0 -0
  118. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/the-benchmarker/README.md +0 -0
  119. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
  120. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
  121. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
  122. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/canonical_message.rs +0 -0
  123. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/checkpoint.rs +0 -0
  124. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/command_handler.rs +0 -0
  125. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/amqp.rs +0 -0
  126. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/aws.rs +0 -0
  127. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/clickhouse.rs +0 -0
  128. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/file/mod.rs +0 -0
  129. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/file/tests.rs +0 -0
  130. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/grpc.proto +0 -0
  131. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/grpc.rs +0 -0
  132. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/http/mod.rs +0 -0
  133. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/http/stream.rs +0 -0
  134. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/ibm_mq.rs +0 -0
  135. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/kafka.rs +0 -0
  136. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/memory/endpoint.rs +0 -0
  137. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/memory/framed.rs +0 -0
  138. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/memory/ipc_unix.rs +0 -0
  139. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/memory/ipc_windows.rs +0 -0
  140. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/memory/memory_transport.rs +0 -0
  141. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/memory/mod.rs +0 -0
  142. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/memory/transport.rs +0 -0
  143. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mongodb/dedup.rs +0 -0
  144. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mongodb/mod.rs +0 -0
  145. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mongodb/publisher.rs +0 -0
  146. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mongodb/readers.rs +0 -0
  147. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mongodb/tests.rs +0 -0
  148. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/mqtt.rs +0 -0
  149. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/nats.rs +0 -0
  150. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/object_store.rs +0 -0
  151. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/poll.rs +0 -0
  152. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/VENDORED.md +0 -0
  153. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/mod.rs +0 -0
  154. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/pgoutput/decoder.rs +0 -0
  155. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/pgoutput/messages.rs +0 -0
  156. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/pgoutput/mod.rs +0 -0
  157. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/pgoutput/registry.rs +0 -0
  158. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/pgoutput/values.rs +0 -0
  159. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/replication.rs +0 -0
  160. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/postgres/state.rs +0 -0
  161. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/redis_streams.rs +0 -0
  162. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/sled.rs +0 -0
  163. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/sqlx/dedup.rs +0 -0
  164. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/sqlx/mod.rs +0 -0
  165. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/sqlx/tests.rs +0 -0
  166. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/structural/mod.rs +0 -0
  167. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/structural/null.rs +0 -0
  168. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/structural/reader.rs +0 -0
  169. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/structural/response.rs +0 -0
  170. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/structural/static_endpoint.rs +0 -0
  171. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/structural/stream_buffer.rs +0 -0
  172. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/websocket.rs +0 -0
  173. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/zeromq/codec.rs +0 -0
  174. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/zeromq/mod.rs +0 -0
  175. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/zeromq/omq.rs +0 -0
  176. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/endpoints/zeromq/zmq.rs +0 -0
  177. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/errors.rs +0 -0
  178. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/event_handler.rs +0 -0
  179. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/event_store.rs +0 -0
  180. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/extensions.rs +0 -0
  181. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/lib.rs +0 -0
  182. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/buffer.rs +0 -0
  183. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/compression.rs +0 -0
  184. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/cookie_jar.rs +0 -0
  185. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/delay.rs +0 -0
  186. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/dlq.rs +0 -0
  187. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/encryption.rs +0 -0
  188. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/id.rs +0 -0
  189. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/limiter.rs +0 -0
  190. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/metrics.rs +0 -0
  191. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/random_panic.rs +0 -0
  192. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/retry.rs +0 -0
  193. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/transform/coerce.rs +0 -0
  194. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/transform/mod.rs +0 -0
  195. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/transform/path.rs +0 -0
  196. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/middleware/weak_join.rs +0 -0
  197. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/models/secrets.rs +0 -0
  198. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/outcomes.rs +0 -0
  199. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/plugin/conformance.rs +0 -0
  200. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/plugin/endpoint.rs +0 -0
  201. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/plugin/message.rs +0 -0
  202. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/plugin/middleware.rs +0 -0
  203. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/plugin/mod.rs +0 -0
  204. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/plugin/sdk.rs +0 -0
  205. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/plugin/test_support.rs +0 -0
  206. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/publisher.rs +0 -0
  207. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/response.rs +0 -0
  208. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/base64_engine.rs +0 -0
  209. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/compression.rs +0 -0
  210. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/connection_registry.rs +0 -0
  211. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/crypto.rs +0 -0
  212. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/crypto_envelope.rs +0 -0
  213. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/interpolation.rs +0 -0
  214. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/mod.rs +0 -0
  215. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/plugin_abi.rs +0 -0
  216. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/support/source_ranges.rs +0 -0
  217. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/test_utils.rs +0 -0
  218. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/traits.rs +0 -0
  219. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/src/type_handler.rs +0 -0
  220. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/README.md +0 -0
  221. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/armature_integration.rs +0 -0
  222. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/amqp.rs +0 -0
  223. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/aws.rs +0 -0
  224. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/clickhouse.rs +0 -0
  225. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/config.toml +0 -0
  226. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/amqp.yml +0 -0
  227. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/aws.yml +0 -0
  228. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/clickhouse.yml +0 -0
  229. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
  230. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
  231. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
  232. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
  233. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
  234. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/ibm_mq.yml +0 -0
  235. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
  236. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/kafka-tls.yml +0 -0
  237. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/kafka.yml +0 -0
  238. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mariadb.yml +0 -0
  239. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
  240. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
  241. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mongodb.yml +0 -0
  242. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mosquitto.conf +0 -0
  243. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
  244. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
  245. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mq_init.mqsc +0 -0
  246. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
  247. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mqtt.yml +0 -0
  248. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
  249. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/mysql.yml +0 -0
  250. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/nats.yml +0 -0
  251. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/object_store.yml +0 -0
  252. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/postgres.yml +0 -0
  253. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/postgres_cdc.yml +0 -0
  254. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/docker-compose/redis.yml +0 -0
  255. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/file.rs +0 -0
  256. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/grpc.rs +0 -0
  257. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/grpc_tls.rs +0 -0
  258. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/http.rs +0 -0
  259. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/http_tls.rs +0 -0
  260. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/ibm_mq.rs +0 -0
  261. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/ibm_mq_tls.rs +0 -0
  262. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/ipc.rs +0 -0
  263. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/kafka.rs +0 -0
  264. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/kafka_tls.rs +0 -0
  265. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/logic_test.rs +0 -0
  266. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/mariadb.rs +0 -0
  267. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/memory.rs +0 -0
  268. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/mod.rs +0 -0
  269. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/mongodb.rs +0 -0
  270. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/mongodb_raw.rs +0 -0
  271. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/mongodb_tls.rs +0 -0
  272. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/mqtt.rs +0 -0
  273. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/mysql.rs +0 -0
  274. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/nats.rs +0 -0
  275. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/object_store.rs +0 -0
  276. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/performance_static.rs +0 -0
  277. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/postgres.rs +0 -0
  278. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/postgres_cdc.rs +0 -0
  279. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/redis_streams.rs +0 -0
  280. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/route.rs +0 -0
  281. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/scripts/gen_certs.sh +0 -0
  282. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/sqlite.rs +0 -0
  283. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/tls_helpers.rs +0 -0
  284. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/websocket.rs +0 -0
  285. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration/zeromq.rs +0 -0
  286. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/integration_test.rs +0 -0
  287. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/memory_leak_test.rs +0 -0
  288. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/ref_test.rs +0 -0
  289. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/reference_docs_test.rs +0 -0
  290. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/sqlite_test.rs +0 -0
  291. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/tls_example.rs +0 -0
  292. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/unit_tests.md +0 -0
  293. {mq_bridge_py_basic-0.4.5 → mq_bridge_py_basic-0.4.6}/tests/websocket_test.rs +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **Looking for what middleware or structural endpoints exist, and how to configure them?**
4
4
  > [REFERENCE.md](docs/REFERENCE.md) is the complete, authoritative list — every middleware
5
- > (`retry`, `dlq`, `transform`, `id`, `deduplication`, `weak_join`, `buffer`, `limiter`, `delay`,
5
+ > (`retry`, `dlq`, `transform`, `id`, `filter`, `deduplication`, `weak_join`, `buffer`, `limiter`, `delay`,
6
6
  > `cookie_jar`, `encryption`, `compression`, `metrics`, `random_panic`, `custom`) and every structural endpoint (`ref`,
7
7
  > `fanout`, `switch`, `request`, `response`, `reader`, `static`, `stream_buffer`, `null`,
8
8
  > `custom`), each with its fields, defaults, and a working YAML example. Do not infer these
@@ -77,8 +77,10 @@ src/
77
77
  │ ├── cookie_jar.rs # Cookie / metadata persistence across requests
78
78
  │ ├── deduplication.rs # Message deduplication (sled)
79
79
  │ ├── delay.rs # Artificial delay
80
+ │ ├── deferred_commit.rs # Hold commits for batches a middleware emptied
80
81
  │ ├── dlq.rs # Dead-letter queue
81
82
  │ ├── encryption.rs # AEAD payload encryption
83
+ │ ├── filter.rs # Expression predicate: keep only matching messages
82
84
  │ ├── id.rs # Replay-stable business identity into `mqb.id`
83
85
  │ ├── limiter.rs # Throughput limiting (msg/s)
84
86
  │ ├── metrics.rs # Metrics collection
@@ -54,6 +54,17 @@ dependencies = [
54
54
  "subtle",
55
55
  ]
56
56
 
57
+ [[package]]
58
+ name = "ahash"
59
+ version = "0.7.8"
60
+ source = "registry+https://github.com/rust-lang/crates.io-index"
61
+ checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
62
+ dependencies = [
63
+ "getrandom 0.2.17",
64
+ "once_cell",
65
+ "version_check",
66
+ ]
67
+
57
68
  [[package]]
58
69
  name = "ahash"
59
70
  version = "0.8.12"
@@ -168,6 +179,15 @@ version = "1.0.104"
168
179
  source = "registry+https://github.com/rust-lang/crates.io-index"
169
180
  checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
170
181
 
182
+ [[package]]
183
+ name = "ar_archive_writer"
184
+ version = "0.5.3"
185
+ source = "registry+https://github.com/rust-lang/crates.io-index"
186
+ checksum = "73cd58deff2140a0a8eae87e417bd01db68a33e148aa93d1e8cd837e55e312b6"
187
+ dependencies = [
188
+ "object",
189
+ ]
190
+
171
191
  [[package]]
172
192
  name = "arc-swap"
173
193
  version = "1.9.2"
@@ -189,6 +209,12 @@ version = "0.5.1"
189
209
  source = "registry+https://github.com/rust-lang/crates.io-index"
190
210
  checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
191
211
 
212
+ [[package]]
213
+ name = "arrayvec"
214
+ version = "0.7.8"
215
+ source = "registry+https://github.com/rust-lang/crates.io-index"
216
+ checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56"
217
+
192
218
  [[package]]
193
219
  name = "asn1-rs"
194
220
  version = "0.7.2"
@@ -949,13 +975,37 @@ dependencies = [
949
975
  "piper",
950
976
  ]
951
977
 
978
+ [[package]]
979
+ name = "borsh"
980
+ version = "1.8.0"
981
+ source = "registry+https://github.com/rust-lang/crates.io-index"
982
+ checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f"
983
+ dependencies = [
984
+ "borsh-derive",
985
+ "bytes",
986
+ "cfg_aliases",
987
+ ]
988
+
989
+ [[package]]
990
+ name = "borsh-derive"
991
+ version = "1.8.0"
992
+ source = "registry+https://github.com/rust-lang/crates.io-index"
993
+ checksum = "d8f347189c62a579b8cd5f80714efa178f52e461dc2e6d701d264f5ff22e566c"
994
+ dependencies = [
995
+ "once_cell",
996
+ "proc-macro-crate",
997
+ "proc-macro2",
998
+ "quote",
999
+ "syn 2.0.119",
1000
+ ]
1001
+
952
1002
  [[package]]
953
1003
  name = "bson"
954
1004
  version = "2.15.0"
955
1005
  source = "registry+https://github.com/rust-lang/crates.io-index"
956
1006
  checksum = "7969a9ba84b0ff843813e7249eed1678d9b6607ce5a3b8f0a47af3fcf7978e6e"
957
1007
  dependencies = [
958
- "ahash",
1008
+ "ahash 0.8.12",
959
1009
  "base64 0.22.1",
960
1010
  "bitvec",
961
1011
  "getrandom 0.2.17",
@@ -978,6 +1028,28 @@ version = "3.20.3"
978
1028
  source = "registry+https://github.com/rust-lang/crates.io-index"
979
1029
  checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
980
1030
 
1031
+ [[package]]
1032
+ name = "bytecheck"
1033
+ version = "0.6.12"
1034
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1035
+ checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2"
1036
+ dependencies = [
1037
+ "bytecheck_derive",
1038
+ "ptr_meta",
1039
+ "simdutf8",
1040
+ ]
1041
+
1042
+ [[package]]
1043
+ name = "bytecheck_derive"
1044
+ version = "0.6.12"
1045
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1046
+ checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659"
1047
+ dependencies = [
1048
+ "proc-macro2",
1049
+ "quote",
1050
+ "syn 1.0.109",
1051
+ ]
1052
+
981
1053
  [[package]]
982
1054
  name = "byteorder"
983
1055
  version = "1.5.0"
@@ -1089,6 +1161,16 @@ dependencies = [
1089
1161
  "windows-link",
1090
1162
  ]
1091
1163
 
1164
+ [[package]]
1165
+ name = "chrono-tz"
1166
+ version = "0.10.4"
1167
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1168
+ checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3"
1169
+ dependencies = [
1170
+ "chrono",
1171
+ "phf 0.12.1",
1172
+ ]
1173
+
1092
1174
  [[package]]
1093
1175
  name = "ciborium"
1094
1176
  version = "0.2.2"
@@ -2274,6 +2356,15 @@ dependencies = [
2274
2356
  "zerocopy",
2275
2357
  ]
2276
2358
 
2359
+ [[package]]
2360
+ name = "hashbrown"
2361
+ version = "0.12.3"
2362
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2363
+ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
2364
+ dependencies = [
2365
+ "ahash 0.7.8",
2366
+ ]
2367
+
2277
2368
  [[package]]
2278
2369
  name = "hashbrown"
2279
2370
  version = "0.14.5"
@@ -2993,7 +3084,7 @@ checksum = "c677b3697ae16611752f25387b69657dfc794281dccf37b191f46b7e7eb012ed"
2993
3084
  dependencies = [
2994
3085
  "derive_more",
2995
3086
  "libmqm-sys",
2996
- "phf",
3087
+ "phf 0.13.1",
2997
3088
  ]
2998
3089
 
2999
3090
  [[package]]
@@ -3348,7 +3439,7 @@ dependencies = [
3348
3439
 
3349
3440
  [[package]]
3350
3441
  name = "mq-bridge"
3351
- version = "0.4.5"
3442
+ version = "0.4.6"
3352
3443
  dependencies = [
3353
3444
  "aes-gcm",
3354
3445
  "anyhow",
@@ -3400,6 +3491,7 @@ dependencies = [
3400
3491
  "reqwest",
3401
3492
  "rmp-serde",
3402
3493
  "rumqttc",
3494
+ "rust_decimal",
3403
3495
  "rustls 0.23.43",
3404
3496
  "rustls-pemfile",
3405
3497
  "schemars",
@@ -3425,13 +3517,14 @@ dependencies = [
3425
3517
  "url",
3426
3518
  "uuid",
3427
3519
  "webpki-roots 1.0.9",
3520
+ "zen-expression",
3428
3521
  "zeromq",
3429
3522
  "zstd",
3430
3523
  ]
3431
3524
 
3432
3525
  [[package]]
3433
3526
  name = "mq-bridge-bindings-common"
3434
- version = "0.4.5"
3527
+ version = "0.4.6"
3435
3528
  dependencies = [
3436
3529
  "anyhow",
3437
3530
  "fast-uuid-v7",
@@ -3445,7 +3538,7 @@ dependencies = [
3445
3538
 
3446
3539
  [[package]]
3447
3540
  name = "mq-bridge-node"
3448
- version = "0.4.5"
3541
+ version = "0.4.6"
3449
3542
  dependencies = [
3450
3543
  "anyhow",
3451
3544
  "async-trait",
@@ -3487,7 +3580,7 @@ dependencies = [
3487
3580
 
3488
3581
  [[package]]
3489
3582
  name = "mq-bridge-py"
3490
- version = "0.4.5"
3583
+ version = "0.4.6"
3491
3584
  dependencies = [
3492
3585
  "anyhow",
3493
3586
  "async-trait",
@@ -3717,6 +3810,15 @@ dependencies = [
3717
3810
  "syn 2.0.119",
3718
3811
  ]
3719
3812
 
3813
+ [[package]]
3814
+ name = "object"
3815
+ version = "0.39.1"
3816
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3817
+ checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b"
3818
+ dependencies = [
3819
+ "memchr",
3820
+ ]
3821
+
3720
3822
  [[package]]
3721
3823
  name = "object_store"
3722
3824
  version = "0.14.1"
@@ -4077,13 +4179,31 @@ dependencies = [
4077
4179
  "webpki-roots 0.26.11",
4078
4180
  ]
4079
4181
 
4182
+ [[package]]
4183
+ name = "phf"
4184
+ version = "0.12.1"
4185
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4186
+ checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
4187
+ dependencies = [
4188
+ "phf_shared 0.12.1",
4189
+ ]
4190
+
4080
4191
  [[package]]
4081
4192
  name = "phf"
4082
4193
  version = "0.13.1"
4083
4194
  source = "registry+https://github.com/rust-lang/crates.io-index"
4084
4195
  checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
4085
4196
  dependencies = [
4086
- "phf_shared",
4197
+ "phf_shared 0.13.1",
4198
+ ]
4199
+
4200
+ [[package]]
4201
+ name = "phf_shared"
4202
+ version = "0.12.1"
4203
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4204
+ checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
4205
+ dependencies = [
4206
+ "siphasher",
4087
4207
  ]
4088
4208
 
4089
4209
  [[package]]
@@ -4473,6 +4593,36 @@ version = "3.2.0"
4473
4593
  source = "registry+https://github.com/rust-lang/crates.io-index"
4474
4594
  checksum = "95067976aca6421a523e491fce939a3e65249bac4b977adee0ee9771568e8aa3"
4475
4595
 
4596
+ [[package]]
4597
+ name = "psm"
4598
+ version = "0.1.32"
4599
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4600
+ checksum = "4dcd034599e63b970727f70d79e02d62390a4a84f7c6b827c27c46d5ac3fa622"
4601
+ dependencies = [
4602
+ "ar_archive_writer",
4603
+ "cc",
4604
+ ]
4605
+
4606
+ [[package]]
4607
+ name = "ptr_meta"
4608
+ version = "0.1.4"
4609
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4610
+ checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
4611
+ dependencies = [
4612
+ "ptr_meta_derive",
4613
+ ]
4614
+
4615
+ [[package]]
4616
+ name = "ptr_meta_derive"
4617
+ version = "0.1.4"
4618
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4619
+ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
4620
+ dependencies = [
4621
+ "proc-macro2",
4622
+ "quote",
4623
+ "syn 1.0.109",
4624
+ ]
4625
+
4476
4626
  [[package]]
4477
4627
  name = "pyo3"
4478
4628
  version = "0.29.2"
@@ -4835,6 +4985,26 @@ dependencies = [
4835
4985
  "pkg-config",
4836
4986
  ]
4837
4987
 
4988
+ [[package]]
4989
+ name = "recursive"
4990
+ version = "0.1.1"
4991
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4992
+ checksum = "0786a43debb760f491b1bc0269fe5e84155353c67482b9e60d0cfb596054b43e"
4993
+ dependencies = [
4994
+ "recursive-proc-macro-impl",
4995
+ "stacker",
4996
+ ]
4997
+
4998
+ [[package]]
4999
+ name = "recursive-proc-macro-impl"
5000
+ version = "0.1.1"
5001
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5002
+ checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b"
5003
+ dependencies = [
5004
+ "quote",
5005
+ "syn 2.0.119",
5006
+ ]
5007
+
4838
5008
  [[package]]
4839
5009
  name = "redis"
4840
5010
  version = "1.5.0"
@@ -4938,6 +5108,15 @@ version = "0.8.11"
4938
5108
  source = "registry+https://github.com/rust-lang/crates.io-index"
4939
5109
  checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
4940
5110
 
5111
+ [[package]]
5112
+ name = "rend"
5113
+ version = "0.4.2"
5114
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5115
+ checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c"
5116
+ dependencies = [
5117
+ "bytecheck",
5118
+ ]
5119
+
4941
5120
  [[package]]
4942
5121
  name = "reqwest"
4943
5122
  version = "0.13.4"
@@ -5001,6 +5180,35 @@ dependencies = [
5001
5180
  "windows-sys 0.52.0",
5002
5181
  ]
5003
5182
 
5183
+ [[package]]
5184
+ name = "rkyv"
5185
+ version = "0.7.46"
5186
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5187
+ checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1"
5188
+ dependencies = [
5189
+ "bitvec",
5190
+ "bytecheck",
5191
+ "bytes",
5192
+ "hashbrown 0.12.3",
5193
+ "ptr_meta",
5194
+ "rend",
5195
+ "rkyv_derive",
5196
+ "seahash",
5197
+ "tinyvec",
5198
+ "uuid",
5199
+ ]
5200
+
5201
+ [[package]]
5202
+ name = "rkyv_derive"
5203
+ version = "0.7.46"
5204
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5205
+ checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5"
5206
+ dependencies = [
5207
+ "proc-macro2",
5208
+ "quote",
5209
+ "syn 1.0.109",
5210
+ ]
5211
+
5004
5212
  [[package]]
5005
5213
  name = "rmp"
5006
5214
  version = "0.8.15"
@@ -5065,6 +5273,33 @@ dependencies = [
5065
5273
  "ordered-multimap",
5066
5274
  ]
5067
5275
 
5276
+ [[package]]
5277
+ name = "rust_decimal"
5278
+ version = "1.42.1"
5279
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5280
+ checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a"
5281
+ dependencies = [
5282
+ "arrayvec",
5283
+ "borsh",
5284
+ "bytes",
5285
+ "num-traits",
5286
+ "rand 0.8.7",
5287
+ "rkyv",
5288
+ "serde",
5289
+ "serde_json",
5290
+ "wasm-bindgen",
5291
+ ]
5292
+
5293
+ [[package]]
5294
+ name = "rust_decimal_macros"
5295
+ version = "1.40.0"
5296
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5297
+ checksum = "74a5a6f027e892c7a035c6fddb50435a1fbf5a734ffc0c2a9fed4d0221440519"
5298
+ dependencies = [
5299
+ "quote",
5300
+ "syn 2.0.119",
5301
+ ]
5302
+
5068
5303
  [[package]]
5069
5304
  name = "rustc-hash"
5070
5305
  version = "2.1.3"
@@ -5333,7 +5568,7 @@ checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba"
5333
5568
  dependencies = [
5334
5569
  "proc-macro2",
5335
5570
  "quote",
5336
- "serde_derive_internals",
5571
+ "serde_derive_internals 0.30.0",
5337
5572
  "syn 3.0.3",
5338
5573
  ]
5339
5574
 
@@ -5391,6 +5626,12 @@ dependencies = [
5391
5626
  "saa",
5392
5627
  ]
5393
5628
 
5629
+ [[package]]
5630
+ name = "seahash"
5631
+ version = "4.1.0"
5632
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5633
+ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
5634
+
5394
5635
  [[package]]
5395
5636
  name = "security-framework"
5396
5637
  version = "3.7.0"
@@ -5482,6 +5723,17 @@ dependencies = [
5482
5723
  "syn 3.0.3",
5483
5724
  ]
5484
5725
 
5726
+ [[package]]
5727
+ name = "serde_derive_internals"
5728
+ version = "0.29.1"
5729
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5730
+ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
5731
+ dependencies = [
5732
+ "proc-macro2",
5733
+ "quote",
5734
+ "syn 2.0.119",
5735
+ ]
5736
+
5485
5737
  [[package]]
5486
5738
  name = "serde_derive_internals"
5487
5739
  version = "0.30.0"
@@ -5979,6 +6231,19 @@ version = "1.2.1"
5979
6231
  source = "registry+https://github.com/rust-lang/crates.io-index"
5980
6232
  checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
5981
6233
 
6234
+ [[package]]
6235
+ name = "stacker"
6236
+ version = "0.1.25"
6237
+ source = "registry+https://github.com/rust-lang/crates.io-index"
6238
+ checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967"
6239
+ dependencies = [
6240
+ "cc",
6241
+ "cfg-if",
6242
+ "libc",
6243
+ "psm",
6244
+ "windows-sys 0.61.2",
6245
+ ]
6246
+
5982
6247
  [[package]]
5983
6248
  name = "stringprep"
5984
6249
  version = "0.1.5"
@@ -5996,6 +6261,24 @@ version = "0.11.1"
5996
6261
  source = "registry+https://github.com/rust-lang/crates.io-index"
5997
6262
  checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
5998
6263
 
6264
+ [[package]]
6265
+ name = "strum"
6266
+ version = "0.27.2"
6267
+ source = "registry+https://github.com/rust-lang/crates.io-index"
6268
+ checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
6269
+
6270
+ [[package]]
6271
+ name = "strum_macros"
6272
+ version = "0.27.2"
6273
+ source = "registry+https://github.com/rust-lang/crates.io-index"
6274
+ checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
6275
+ dependencies = [
6276
+ "heck",
6277
+ "proc-macro2",
6278
+ "quote",
6279
+ "syn 2.0.119",
6280
+ ]
6281
+
5999
6282
  [[package]]
6000
6283
  name = "subtle"
6001
6284
  version = "2.6.1"
@@ -6008,6 +6291,17 @@ version = "0.1.0"
6008
6291
  source = "registry+https://github.com/rust-lang/crates.io-index"
6009
6292
  checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a"
6010
6293
 
6294
+ [[package]]
6295
+ name = "syn"
6296
+ version = "1.0.109"
6297
+ source = "registry+https://github.com/rust-lang/crates.io-index"
6298
+ checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
6299
+ dependencies = [
6300
+ "proc-macro2",
6301
+ "quote",
6302
+ "unicode-ident",
6303
+ ]
6304
+
6011
6305
  [[package]]
6012
6306
  name = "syn"
6013
6307
  version = "2.0.119"
@@ -6837,6 +7131,7 @@ dependencies = [
6837
7131
  "cfg-if",
6838
7132
  "once_cell",
6839
7133
  "rustversion",
7134
+ "serde",
6840
7135
  "wasm-bindgen-macro",
6841
7136
  "wasm-bindgen-shared",
6842
7137
  ]
@@ -7273,6 +7568,63 @@ dependencies = [
7273
7568
  "loom",
7274
7569
  ]
7275
7570
 
7571
+ [[package]]
7572
+ name = "zen-expression"
7573
+ version = "0.55.1"
7574
+ source = "registry+https://github.com/rust-lang/crates.io-index"
7575
+ checksum = "5856c9af91eda7a513982c0073bd64fb38f6a5d00a72f7eb83416c2df32acc9f"
7576
+ dependencies = [
7577
+ "ahash 0.8.12",
7578
+ "anyhow",
7579
+ "bumpalo",
7580
+ "chrono",
7581
+ "chrono-tz",
7582
+ "fastrand",
7583
+ "humantime",
7584
+ "iana-time-zone",
7585
+ "nohash-hasher",
7586
+ "once_cell",
7587
+ "recursive",
7588
+ "regex-lite",
7589
+ "rust_decimal",
7590
+ "rust_decimal_macros",
7591
+ "serde",
7592
+ "serde_json",
7593
+ "strsim",
7594
+ "strum",
7595
+ "strum_macros",
7596
+ "thiserror 1.0.69",
7597
+ "zen-macros",
7598
+ "zen-types",
7599
+ ]
7600
+
7601
+ [[package]]
7602
+ name = "zen-macros"
7603
+ version = "0.55.1"
7604
+ source = "registry+https://github.com/rust-lang/crates.io-index"
7605
+ checksum = "8f54511739f4c1cb5690912ebb1cddacd8623d4619361d569eb53d29055192bc"
7606
+ dependencies = [
7607
+ "proc-macro2",
7608
+ "quote",
7609
+ "serde_derive_internals 0.29.1",
7610
+ "syn 2.0.119",
7611
+ ]
7612
+
7613
+ [[package]]
7614
+ name = "zen-types"
7615
+ version = "0.55.1"
7616
+ source = "registry+https://github.com/rust-lang/crates.io-index"
7617
+ checksum = "af8fffa0884c139e3d4e4831ac97b7c4b087c89e2aaf77c19eb985238b0ce967"
7618
+ dependencies = [
7619
+ "ahash 0.8.12",
7620
+ "nohash-hasher",
7621
+ "rust_decimal",
7622
+ "rust_decimal_macros",
7623
+ "serde",
7624
+ "serde_json",
7625
+ "thiserror 1.0.69",
7626
+ ]
7627
+
7276
7628
  [[package]]
7277
7629
  name = "zerocopy"
7278
7630
  version = "0.8.55"
@@ -16,7 +16,7 @@ members = ["bindings-common", "python/mq-bridge-py"]
16
16
  resolver = "2"
17
17
 
18
18
  [workspace.package]
19
- version = "0.4.5"
19
+ version = "0.4.6"
20
20
 
21
21
  [workspace.dependencies]
22
22
  anyhow = "1.0"
@@ -155,6 +155,11 @@ base64 = { version = "0.23" }
155
155
  # AEAD ciphers for the `encryption` feature (payload middleware + at-rest file/object).
156
156
  chacha20poly1305 = { version = "0.11", optional = true }
157
157
  aes-gcm = { version = "0.11", optional = true }
158
+
159
+ # Expression VM for the `filter` feature. `regex-lite` keeps the regex engine
160
+ # pure Rust; the default features pull a heavier one.
161
+ zen-expression = { version = "0.55.1", optional = true, default-features = false, features = ["regex-lite"] }
162
+ rust_decimal = { version = "1", optional = true }
158
163
  tokio-websockets = { version = "0.13", optional = true, default-features = false, features = ["client", "server", "sha1_smol", "fastrand"] }
159
164
 
160
165
  # AWS
@@ -213,7 +218,7 @@ protoc-bin-vendored = { version = "3.2", optional = true }
213
218
 
214
219
  [features]
215
220
  default = []
216
- middleware = ["metrics", "dedup", "compression", "encryption"]
221
+ middleware = ["metrics", "dedup", "compression", "encryption", "filter"]
217
222
  # Opt-in: parse JSON f64 with full precision so a number round-trips bit-exactly.
218
223
  # Off by default because it slows float parsing; without it serde_json shifts ~1 ULP
219
224
  # on ~19% of 17-significant-digit doubles (e.g. a Postgres `double precision` value
@@ -243,6 +248,11 @@ compression = ["dep:flate2", "dep:lz4_flex", "dep:zstd"]
243
248
  # AEAD payload encryption: the `encryption` middleware and the at-rest
244
249
  # `encryption` field on the file/object_store endpoints.
245
250
  encryption = ["dep:chacha20poly1305", "dep:aes-gcm"]
251
+ # Expression predicates: the `filter` middleware and the `switch` endpoint's
252
+ # `when` cases. Kept out of `portable` because zen-expression pulls in psm,
253
+ # whose build.rs assembles per-target stack-switching assembly.
254
+ filter = ["zen"]
255
+ zen = ["dep:zen-expression", "dep:rust_decimal"]
246
256
  metrics = ["dep:metrics"]
247
257
  # Load endpoints from native plugin libraries at runtime (`mq_bridge::plugin`).
248
258
  # The endpoint itself lives in its own crate and package; see docs/PLUGINS.md.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mq-bridge-py-basic
3
- Version: 0.4.5
3
+ Version: 0.4.6
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: License :: OSI Approved :: MIT License
6
6
  Classifier: Programming Language :: Python :: 3
@@ -306,6 +306,13 @@ input:
306
306
 
307
307
  This is useful when you want stable, explicit semantics regardless of future optimizations, or when you want to avoid the inline path's response behavior differences. In particular, the inline path does not automatically echo unchanged request metadata back as HTTP response headers.
308
308
 
309
+ For HTTP publishers, `pass_through_status: true` treats non-2xx response statuses as response
310
+ data instead of publisher errors. On a non-streaming HTTP request/reply route, it also keeps the
311
+ listener running after a transient sink failure and returns HTTP 502 to the request. For composite
312
+ outputs such as `fanout`, every leaf sink must opt in; mixed outputs retain the normal
313
+ stop-and-reconnect policy. Streamable HTTP inputs retain their protocol-specific error frames;
314
+ neither they nor `fire_and_forget` consumers use this 502 behavior.
315
+
309
316
  ### Connection Sharing
310
317
 
311
318
  Publishers that target the same server reuse one underlying transport client by