dcex 0.26.0__tar.gz → 0.26.2__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.
- {dcex-0.26.0 → dcex-0.26.2}/Cargo.lock +1 -1
- {dcex-0.26.0 → dcex-0.26.2}/PKG-INFO +1 -1
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/CHANGELOG.md +18 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/Cargo.toml +1 -1
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/wrappers.rs +3 -3
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/client.rs +5 -6
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/tests.rs +14 -1
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/client.rs +22 -14
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/tests.rs +20 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/wrappers.rs +2 -2
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/wrappers.rs +4 -4
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mod.rs +98 -1
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/product_table.rs +103 -69
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/aster.rs +43 -72
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/backpack.rs +35 -52
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/binance.rs +43 -72
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/bingx.rs +35 -52
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/bitget.rs +36 -56
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/bitmart.rs +42 -68
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/bitmex.rs +36 -56
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/bybit.rs +36 -56
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/gateio.rs +36 -56
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/http.rs +35 -6
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/hyperliquid.rs +35 -53
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/kraken.rs +35 -52
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/kucoin.rs +35 -52
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/lighter.rs +67 -84
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/mexc.rs +35 -59
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/clients/okx.rs +36 -56
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/lib.rs +142 -1
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/product_table.rs +6 -18
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/aster.rs +4 -13
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/backpack.rs +6 -25
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/binance.rs +4 -13
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/bingx.rs +4 -13
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/bitget.rs +6 -25
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/bitmart.rs +6 -25
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/bitmex.rs +6 -19
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/bybit.rs +6 -19
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/gateio.rs +6 -19
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/hyperliquid.rs +6 -14
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/kraken.rs +4 -13
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/kucoin.rs +2 -12
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/lighter.rs +4 -13
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/mexc.rs +4 -13
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/ws/okx.rs +6 -25
- {dcex-0.26.0 → dcex-0.26.2}/dcex/_native.pyi +43 -16
- dcex-0.26.2/dcex/_native_http.py +81 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/aster/_http_manager.py +9 -23
- {dcex-0.26.0 → dcex-0.26.2}/dcex/aster/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/aster/_http_manager.py +12 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/aster/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/backpack/_http_manager.py +18 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/binance/_account_http.py +7 -5
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/binance/_http_manager.py +3 -15
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/binance/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/binance/_trade_http.py +7 -5
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bingx/_http_manager.py +14 -19
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bingx/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitget/_http_manager.py +9 -22
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitget/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmart/_http_manager.py +11 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmart/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/_http_manager.py +19 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/_http_manager.py +9 -22
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/gateio/_http_manager.py +14 -25
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/gateio/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/hyperliquid/_http_manager.py +23 -30
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kraken/_http_manager.py +9 -22
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kraken/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kucoin/_http_manager.py +11 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kucoin/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/lighter/_http_manager.py +16 -25
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/mexc/_http_manager.py +11 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/mexc/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/_http_manager.py +9 -21
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/_public_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/backpack/_http_manager.py +24 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/binance/_account_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/binance/_http_manager.py +3 -15
- {dcex-0.26.0 → dcex-0.26.2}/dcex/binance/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/binance/_trade_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bingx/_http_manager.py +23 -20
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bingx/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitget/_http_manager.py +12 -22
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitget/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmart/_http_manager.py +14 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmart/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/_http_manager.py +22 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/_http_manager.py +12 -22
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/gateio/_http_manager.py +18 -26
- {dcex-0.26.0 → dcex-0.26.2}/dcex/gateio/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/hyperliquid/_http_manager.py +25 -30
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kraken/_http_manager.py +12 -22
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kraken/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kucoin/_http_manager.py +14 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kucoin/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/lighter/_http_manager.py +10 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/mexc/_http_manager.py +14 -24
- {dcex-0.26.0 → dcex-0.26.2}/dcex/mexc/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/_http_manager.py +12 -21
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/_market_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/_public_http.py +8 -4
- {dcex-0.26.0 → dcex-0.26.2}/pyproject.toml +1 -1
- dcex-0.26.0/dcex/_native_http.py +0 -38
- {dcex-0.26.0 → dcex-0.26.2}/Cargo.toml +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/LICENSE +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/LICENSES/Apache-2.0.txt +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/README.md +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/THIRD_PARTY_NOTICES.md +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/README.md +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/aster_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/aster_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/aster_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/backpack_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/backpack_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/backpack_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/binance_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/binance_time.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/binance_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/binance_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bingx_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bingx_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bingx_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitget_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitget_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitget_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitmart_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitmart_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitmart_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitmex_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitmex_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bitmex_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bybit_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bybit_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/bybit_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/core_local_benchmark.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/gateio_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/gateio_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/gateio_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/hyperliquid_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/hyperliquid_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/hyperliquid_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/kraken_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/kraken_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/kraken_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/kucoin_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/kucoin_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/kucoin_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/lighter_bench.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/lighter_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/lighter_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/lighter_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/mexc_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/mexc_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/mexc_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/okx_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/okx_ws_private_readonly.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/okx_ws_public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/examples/public_http_benchmark.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/common.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/crypto.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ethereum.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchange.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/aster/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/backpack/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/stream.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/binance/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bingx/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitget/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmart/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/position.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/trading.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bitmex/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/asset.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/position.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/bybit/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/gateio/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/asset.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/msgpack.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/hyperliquid/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kraken/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/kucoin/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/lighter/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/mexc/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/account.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/asset.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/client.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/endpoints.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/market.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/params.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/signing.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/trade.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/websocket/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/websocket/private.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/websocket/public.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/exchanges/okx/wrappers.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/http.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/lib.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/lighter.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/product_table_fetch/exchanges.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/product_table_fetch/tests.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/product_table_fetch.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/aster.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/backpack.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/binance.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/bingx.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/bitget.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/bitmart.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/bitmex.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/bybit.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/connection.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/gateio.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/hyperliquid.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/kraken.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/kucoin.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/lighter.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/mexc.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/mod.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/src/ws/okx.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/api_surface.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/aster.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/backpack.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/binance.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/bingx.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/bitget.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/bitmart.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/bitmex.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/bybit.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/common.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/gateio.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/hyperliquid.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/kraken.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/kucoin.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/lighter.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/mexc.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity/okx.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_http_parity.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/aster.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/backpack.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/binance.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/bingx.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/bitget.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/bitmart.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/bitmex.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/bybit.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/common.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/gateio.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/hyperliquid.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/kraken.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/kucoin.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/lighter.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/mexc.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful/okx.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex/tests/live_stateful.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/Cargo.toml +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/crates/dcex-python/src/functions.rs +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/aster/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/aster/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/aster/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/aster/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/aster/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/aster/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/aster/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/aster/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/backpack/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/backpack/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/backpack/_market_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/backpack/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/backpack/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/binance/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/binance/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/binance/enums.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bingx/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bingx/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bingx/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bingx/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitget/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitget/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitget/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitget/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmart/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmart/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmart/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmart/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/_position_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/_trading_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bitmex/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/_asset_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/_position_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/bybit/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/gateio/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/gateio/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/gateio/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/gateio/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/hyperliquid/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/hyperliquid/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/hyperliquid/_asset_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/hyperliquid/_market_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/hyperliquid/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/hyperliquid/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kraken/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kraken/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kraken/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kraken/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kucoin/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kucoin/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kucoin/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/kucoin/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/lighter/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/lighter/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/lighter/_market_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/lighter/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/lighter/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/mexc/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/mexc/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/mexc/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/mexc/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/_asset_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/okx/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/product_table/fetch.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/async_support/product_table/manager.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/backpack/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/backpack/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/backpack/_market_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/backpack/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/backpack/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/base/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/base/http_manager.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/binance/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/binance/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/binance/enums.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bingx/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bingx/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bingx/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bingx/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitget/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitget/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitget/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitget/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmart/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmart/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmart/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmart/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/_position_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/_trading_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bitmex/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/_asset_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/_position_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/bybit/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/enums.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/gateio/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/gateio/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/gateio/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/gateio/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/hyperliquid/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/hyperliquid/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/hyperliquid/_asset_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/hyperliquid/_market_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/hyperliquid/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/hyperliquid/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kraken/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kraken/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kraken/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kraken/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kucoin/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kucoin/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kucoin/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/kucoin/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/lighter/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/lighter/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/lighter/_market_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/lighter/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/lighter/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/mexc/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/mexc/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/mexc/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/mexc/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/_account_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/_asset_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/_trade_http.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/okx/client.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/product_table/_query.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/product_table/fetch.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/product_table/manager.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/registry.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/utils/address_utils.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/utils/common.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/utils/decimal_utils.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/utils/errors.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/utils/helpers.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/utils/jupyter_helper.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/utils/timeframe_utils.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/__init__.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/_base.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/aster.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/backpack.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/binance.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/bingx.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/bitget.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/bitmart.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/bitmex.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/bybit.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/gateio.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/hyperliquid.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/kraken.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/kucoin.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/lighter.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/mexc.py +0 -0
- {dcex-0.26.0 → dcex-0.26.2}/dcex/ws/okx.py +0 -0
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## 0.4.3 (2026-06-29)
|
|
2
|
+
|
|
3
|
+
### Fix
|
|
4
|
+
|
|
5
|
+
- require API key for listen key requests
|
|
6
|
+
- require BitMEX credentials for signed requests
|
|
7
|
+
|
|
8
|
+
## 0.4.2 (2026-06-29)
|
|
9
|
+
|
|
10
|
+
### Fix
|
|
11
|
+
|
|
12
|
+
- satisfy product table lint checks
|
|
13
|
+
- align native params and timeout validation
|
|
14
|
+
|
|
15
|
+
### Perf
|
|
16
|
+
|
|
17
|
+
- reduce product table lookup allocations
|
|
18
|
+
|
|
1
19
|
## 0.4.1 (2026-06-28)
|
|
2
20
|
|
|
3
21
|
### Fix
|
|
@@ -6,7 +6,7 @@ edition.workspace = true
|
|
|
6
6
|
license.workspace = true
|
|
7
7
|
readme = "README.md"
|
|
8
8
|
repository.workspace = true
|
|
9
|
-
version = "0.4.
|
|
9
|
+
version = "0.4.3"
|
|
10
10
|
keywords = ["crypto", "trading", "exchange", "http"]
|
|
11
11
|
categories = ["api-bindings", "web-programming::http-client"]
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
15
15
|
set_futures_multi_assets_mode(multi_assets_margin => "multiAssetsMargin"),
|
|
16
16
|
get_futures_balance(),
|
|
17
17
|
get_futures_account(),
|
|
18
|
-
modify_futures_position_margin(product_symbol => "product_symbol", amount => "amount", type_ => "
|
|
18
|
+
modify_futures_position_margin(product_symbol => "product_symbol", amount => "amount", type_ => "type"),
|
|
19
19
|
get_futures_position_margin_history(product_symbol => "product_symbol"),
|
|
20
20
|
get_futures_position_risk(),
|
|
21
21
|
get_futures_user_trades(product_symbol => "product_symbol"),
|
|
@@ -35,7 +35,7 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
35
35
|
create_futures_listen_key(),
|
|
36
36
|
keep_alive_futures_listen_key(),
|
|
37
37
|
close_futures_listen_key(),
|
|
38
|
-
place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "
|
|
38
|
+
place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
|
|
39
39
|
cancel_spot_order(product_symbol => "product_symbol"),
|
|
40
40
|
get_spot_order(product_symbol => "product_symbol"),
|
|
41
41
|
get_spot_open_order(product_symbol => "product_symbol"),
|
|
@@ -43,7 +43,7 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
43
43
|
cancel_all_spot_open_orders(product_symbol => "product_symbol"),
|
|
44
44
|
get_spot_all_orders(product_symbol => "product_symbol"),
|
|
45
45
|
get_spot_user_trades(),
|
|
46
|
-
place_futures_order(product_symbol => "product_symbol", side => "side", type_ => "
|
|
46
|
+
place_futures_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
|
|
47
47
|
modify_futures_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
|
|
48
48
|
place_futures_chase_order(product_symbol => "product_symbol", side => "side", quantity_unit => "quantityUnit", quantity => "quantity", chase_offset => "chaseOffset", chase_offset_type => "chaseOffsetType"),
|
|
49
49
|
place_futures_batch_orders(batch_orders => "batchOrders"),
|
|
@@ -6,7 +6,7 @@ use serde_json::Value;
|
|
|
6
6
|
use crate::exchange::{ExchangeHttpClient, ValidatedResponse};
|
|
7
7
|
use crate::http::{block_on, HttpMethod, HttpRequest, HttpResponse};
|
|
8
8
|
use crate::product_table::ProductTable;
|
|
9
|
-
use crate::Result;
|
|
9
|
+
use crate::{DcexError, Result};
|
|
10
10
|
|
|
11
11
|
use super::endpoints::BASE_URL;
|
|
12
12
|
use super::params::{exchange_symbol_fallback, is_canonical_product_symbol};
|
|
@@ -157,11 +157,10 @@ impl BingxClient {
|
|
|
157
157
|
path: &str,
|
|
158
158
|
params: Vec<(String, String)>,
|
|
159
159
|
) -> Result<ValidatedResponse> {
|
|
160
|
-
let
|
|
161
|
-
.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
.unwrap_or_default();
|
|
160
|
+
let api_key = self.api_key.as_deref().ok_or_else(|| {
|
|
161
|
+
DcexError::InvalidInput("BingX API key is required for this request.".to_string())
|
|
162
|
+
})?;
|
|
163
|
+
let headers = vec![("X-BX-APIKEY".to_string(), api_key.to_string())];
|
|
165
164
|
self.request(HttpMethod::Post, path, params, false, headers, None)
|
|
166
165
|
.await
|
|
167
166
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
use crate::exchange::RequestSigner;
|
|
2
|
-
use crate::http::{HttpMethod, HttpRequest};
|
|
2
|
+
use crate::http::{block_on, HttpMethod, HttpRequest};
|
|
3
|
+
use std::time::Duration;
|
|
3
4
|
|
|
5
|
+
use super::client::BingxClient;
|
|
4
6
|
use super::endpoints::BASE_URL;
|
|
5
7
|
use super::signing::BingxSigner;
|
|
6
8
|
|
|
@@ -37,3 +39,14 @@ fn signer_uses_unescaped_sorted_payload() {
|
|
|
37
39
|
Some("api-key")
|
|
38
40
|
);
|
|
39
41
|
}
|
|
42
|
+
|
|
43
|
+
#[test]
|
|
44
|
+
fn listen_key_requires_api_key() {
|
|
45
|
+
let client = BingxClient::public(Duration::from_secs(1)).expect("client");
|
|
46
|
+
let error = block_on(async move { client.private_request("get_listen_key", Vec::new()).await })
|
|
47
|
+
.expect_err("missing API key should fail before sending");
|
|
48
|
+
assert_eq!(
|
|
49
|
+
error.to_string(),
|
|
50
|
+
"BingX API key is required for this request."
|
|
51
|
+
);
|
|
52
|
+
}
|
|
@@ -157,24 +157,32 @@ impl BitmexClient {
|
|
|
157
157
|
request.body = body.clone().map(RequestBody::Raw).unwrap_or_default();
|
|
158
158
|
}
|
|
159
159
|
if signed {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
160
|
+
let (api_key, api_secret) = self.credentials()?;
|
|
161
|
+
let body = String::from_utf8_lossy(body.as_deref().unwrap_or_default());
|
|
162
|
+
let payload = format!("{}{full_path}{expires}{body}", http_method_name(method));
|
|
163
|
+
let signature = hmac_sha256_hex(api_secret.as_bytes(), payload.as_bytes())?;
|
|
164
|
+
request
|
|
165
|
+
.headers
|
|
166
|
+
.insert("api-key".to_string(), api_key.to_string());
|
|
167
|
+
request
|
|
168
|
+
.headers
|
|
169
|
+
.insert("api-signature".to_string(), signature);
|
|
170
|
+
request
|
|
171
|
+
.headers
|
|
172
|
+
.insert("api-expires".to_string(), expires.to_string());
|
|
174
173
|
}
|
|
175
174
|
Ok(request)
|
|
176
175
|
}
|
|
177
176
|
|
|
177
|
+
fn credentials(&self) -> Result<(&str, &str)> {
|
|
178
|
+
match (&self.api_key, &self.api_secret) {
|
|
179
|
+
(Some(api_key), Some(api_secret)) => Ok((api_key, api_secret)),
|
|
180
|
+
_ => Err(DcexError::InvalidInput(
|
|
181
|
+
"Signed BitMEX requests require api_key and api_secret.".to_string(),
|
|
182
|
+
)),
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
178
186
|
pub(super) fn exchange_symbol(&self, product_symbol: &str) -> Result<String> {
|
|
179
187
|
if is_canonical_product_symbol(product_symbol) {
|
|
180
188
|
if let Some(table) = &self.product_table {
|
|
@@ -31,6 +31,26 @@ fn signature_includes_encoded_query_path() {
|
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
#[test]
|
|
35
|
+
fn signed_request_requires_credentials() {
|
|
36
|
+
let client = BitmexClient::public(Duration::from_secs(1)).expect("client");
|
|
37
|
+
let error = client
|
|
38
|
+
.build_request(
|
|
39
|
+
HttpMethod::Get,
|
|
40
|
+
"/api/v1/order",
|
|
41
|
+
Vec::new(),
|
|
42
|
+
None,
|
|
43
|
+
true,
|
|
44
|
+
1_700_000_005,
|
|
45
|
+
)
|
|
46
|
+
.expect_err("missing credentials should fail before sending");
|
|
47
|
+
|
|
48
|
+
assert_eq!(
|
|
49
|
+
error.to_string(),
|
|
50
|
+
"Signed BitMEX requests require api_key and api_secret."
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
34
54
|
#[test]
|
|
35
55
|
fn limit_buy_shortcut_builds_order_body_without_side_param() {
|
|
36
56
|
let client = BitmexClient::public(Duration::from_secs(1)).expect("client");
|
|
@@ -47,7 +47,7 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
47
47
|
place_futures_market_buy_order(product_symbol => "product_symbol", size => "size"),
|
|
48
48
|
place_futures_market_order(product_symbol => "product_symbol", side => "side", size => "size"),
|
|
49
49
|
place_futures_market_sell_order(product_symbol => "product_symbol", size => "size"),
|
|
50
|
-
place_futures_order(product_symbol => "product_symbol", side => "side", type_ => "
|
|
50
|
+
place_futures_order(product_symbol => "product_symbol", side => "side", type_ => "type", size => "size"),
|
|
51
51
|
place_futures_post_only_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
|
|
52
52
|
place_futures_post_only_limit_order(product_symbol => "product_symbol", side => "side", size => "size", price => "price"),
|
|
53
53
|
place_futures_post_only_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
|
|
@@ -60,7 +60,7 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
60
60
|
place_spot_market_buy_order(product_symbol => "product_symbol"),
|
|
61
61
|
place_spot_market_order(product_symbol => "product_symbol", side => "side"),
|
|
62
62
|
place_spot_market_sell_order(product_symbol => "product_symbol"),
|
|
63
|
-
place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "
|
|
63
|
+
place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
|
|
64
64
|
place_spot_post_only_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
|
|
65
65
|
place_spot_post_only_limit_order(product_symbol => "product_symbol", side => "side", size => "size", price => "price"),
|
|
66
66
|
place_spot_post_only_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
|
|
@@ -39,7 +39,7 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
39
39
|
cancel_spot_open_orders(product_symbol => "product_symbol"),
|
|
40
40
|
cancel_spot_order(product_symbol => "product_symbol"),
|
|
41
41
|
change_contract_leverage(leverage => "leverage"),
|
|
42
|
-
change_contract_margin(position_id => "positionId", amount => "amount", type_ => "
|
|
42
|
+
change_contract_margin(position_id => "positionId", amount => "amount", type_ => "type"),
|
|
43
43
|
change_contract_position_mode(position_mode => "positionMode"),
|
|
44
44
|
get_contract_asset(currency => "currency"),
|
|
45
45
|
get_contract_assets(),
|
|
@@ -82,7 +82,7 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
82
82
|
place_contract_market_buy_order(product_symbol => "product_symbol", vol => "vol"),
|
|
83
83
|
place_contract_market_order(product_symbol => "product_symbol", side => "side", vol => "vol"),
|
|
84
84
|
place_contract_market_sell_order(product_symbol => "product_symbol", vol => "vol"),
|
|
85
|
-
place_contract_order(product_symbol => "product_symbol", side => "side", type_ => "
|
|
85
|
+
place_contract_order(product_symbol => "product_symbol", side => "side", type_ => "type", open_type => "openType", vol => "vol"),
|
|
86
86
|
place_contract_post_only_buy_order(product_symbol => "product_symbol", price => "price", vol => "vol"),
|
|
87
87
|
place_contract_post_only_order(product_symbol => "product_symbol", side => "side", price => "price", vol => "vol"),
|
|
88
88
|
place_contract_post_only_sell_order(product_symbol => "product_symbol", price => "price", vol => "vol"),
|
|
@@ -93,12 +93,12 @@ crate::exchanges::impl_exchange_method_wrappers! {
|
|
|
93
93
|
place_spot_market_buy_order(product_symbol => "product_symbol", quote_order_qty => "quoteOrderQty"),
|
|
94
94
|
place_spot_market_order(product_symbol => "product_symbol", side => "side"),
|
|
95
95
|
place_spot_market_sell_order(product_symbol => "product_symbol", quantity => "quantity"),
|
|
96
|
-
place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "
|
|
96
|
+
place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
|
|
97
97
|
place_spot_post_only_limit_buy_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
|
|
98
98
|
place_spot_post_only_limit_order(product_symbol => "product_symbol", side => "side", quantity => "quantity", price => "price"),
|
|
99
99
|
place_spot_post_only_limit_sell_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
|
|
100
100
|
set_spot_mx_deduct(mx_deduct_enable => "mxDeductEnable"),
|
|
101
|
-
test_spot_order(product_symbol => "product_symbol", side => "side", type_ => "
|
|
101
|
+
test_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
|
|
102
102
|
user_universal_transfer(from_account_type => "fromAccountType", to_account_type => "toAccountType", asset => "asset", amount => "amount"),
|
|
103
103
|
];
|
|
104
104
|
}
|
|
@@ -546,7 +546,7 @@ impl<'a, C: ExchangeMethodRequestClient> ExchangeMethodRequest<'a, C> {
|
|
|
546
546
|
}
|
|
547
547
|
|
|
548
548
|
pub fn from_(self, value: impl ToString) -> Self {
|
|
549
|
-
self.param("
|
|
549
|
+
self.param("from", value)
|
|
550
550
|
}
|
|
551
551
|
|
|
552
552
|
pub fn from_account(self, value: impl ToString) -> Self {
|
|
@@ -1646,16 +1646,113 @@ mod tests {
|
|
|
1646
1646
|
let client = DummyClient;
|
|
1647
1647
|
let request = ExchangeMethodRequest::private(&client, "wallet_transfer", Vec::new())
|
|
1648
1648
|
.currency_pair("BTC_USDT")
|
|
1649
|
+
.from_("spot")
|
|
1649
1650
|
.settle("usdt");
|
|
1650
1651
|
|
|
1651
1652
|
assert_eq!(
|
|
1652
1653
|
request.params,
|
|
1653
1654
|
vec![
|
|
1654
1655
|
("currency_pair".to_string(), "BTC_USDT".to_string()),
|
|
1656
|
+
("from".to_string(), "spot".to_string()),
|
|
1655
1657
|
("settle".to_string(), "usdt".to_string())
|
|
1656
1658
|
]
|
|
1657
1659
|
);
|
|
1658
1660
|
}
|
|
1661
|
+
|
|
1662
|
+
#[test]
|
|
1663
|
+
fn type_keyword_builders_use_native_type_parameter_name() {
|
|
1664
|
+
let client =
|
|
1665
|
+
crate::exchanges::aster::AsterClient::public(std::time::Duration::from_secs(1))
|
|
1666
|
+
.expect("client");
|
|
1667
|
+
|
|
1668
|
+
let spot = client.place_spot_order("ASTER-USDT-SPOT", "buy", "MARKET");
|
|
1669
|
+
assert_eq!(
|
|
1670
|
+
spot.params,
|
|
1671
|
+
vec![
|
|
1672
|
+
("product_symbol".to_string(), "ASTER-USDT-SPOT".to_string()),
|
|
1673
|
+
("side".to_string(), "buy".to_string()),
|
|
1674
|
+
("type".to_string(), "MARKET".to_string())
|
|
1675
|
+
]
|
|
1676
|
+
);
|
|
1677
|
+
|
|
1678
|
+
let futures = client.place_futures_order("ASTER-USDT-SWAP", "sell", "LIMIT");
|
|
1679
|
+
assert_eq!(
|
|
1680
|
+
futures.params,
|
|
1681
|
+
vec![
|
|
1682
|
+
("product_symbol".to_string(), "ASTER-USDT-SWAP".to_string()),
|
|
1683
|
+
("side".to_string(), "sell".to_string()),
|
|
1684
|
+
("type".to_string(), "LIMIT".to_string())
|
|
1685
|
+
]
|
|
1686
|
+
);
|
|
1687
|
+
|
|
1688
|
+
let margin = client.modify_futures_position_margin("ASTER-USDT-SWAP", "10", "ADD");
|
|
1689
|
+
assert_eq!(
|
|
1690
|
+
margin.params,
|
|
1691
|
+
vec![
|
|
1692
|
+
("product_symbol".to_string(), "ASTER-USDT-SWAP".to_string()),
|
|
1693
|
+
("amount".to_string(), "10".to_string()),
|
|
1694
|
+
("type".to_string(), "ADD".to_string())
|
|
1695
|
+
]
|
|
1696
|
+
);
|
|
1697
|
+
|
|
1698
|
+
let client =
|
|
1699
|
+
crate::exchanges::kucoin::KucoinClient::public(std::time::Duration::from_secs(1))
|
|
1700
|
+
.expect("client");
|
|
1701
|
+
let spot = client.place_spot_order("BTC-USDT-SPOT", "buy", "market");
|
|
1702
|
+
assert_eq!(
|
|
1703
|
+
spot.params,
|
|
1704
|
+
vec![
|
|
1705
|
+
("product_symbol".to_string(), "BTC-USDT-SPOT".to_string()),
|
|
1706
|
+
("side".to_string(), "buy".to_string()),
|
|
1707
|
+
("type".to_string(), "market".to_string())
|
|
1708
|
+
]
|
|
1709
|
+
);
|
|
1710
|
+
|
|
1711
|
+
let futures = client.place_futures_order("BTC-USDT-SWAP", "sell", "limit", "1");
|
|
1712
|
+
assert_eq!(
|
|
1713
|
+
futures.params,
|
|
1714
|
+
vec![
|
|
1715
|
+
("product_symbol".to_string(), "BTC-USDT-SWAP".to_string()),
|
|
1716
|
+
("side".to_string(), "sell".to_string()),
|
|
1717
|
+
("type".to_string(), "limit".to_string()),
|
|
1718
|
+
("size".to_string(), "1".to_string())
|
|
1719
|
+
]
|
|
1720
|
+
);
|
|
1721
|
+
|
|
1722
|
+
let client = crate::exchanges::mexc::MexcClient::public(std::time::Duration::from_secs(1))
|
|
1723
|
+
.expect("client");
|
|
1724
|
+
let spot = client.place_spot_order("MX-USDT-SPOT", "BUY", "MARKET");
|
|
1725
|
+
assert_eq!(
|
|
1726
|
+
spot.params,
|
|
1727
|
+
vec![
|
|
1728
|
+
("product_symbol".to_string(), "MX-USDT-SPOT".to_string()),
|
|
1729
|
+
("side".to_string(), "BUY".to_string()),
|
|
1730
|
+
("type".to_string(), "MARKET".to_string())
|
|
1731
|
+
]
|
|
1732
|
+
);
|
|
1733
|
+
|
|
1734
|
+
let contract = client.place_contract_order("BTC-USDT-SWAP", "1", "5", "1", "10");
|
|
1735
|
+
assert_eq!(
|
|
1736
|
+
contract.params,
|
|
1737
|
+
vec![
|
|
1738
|
+
("product_symbol".to_string(), "BTC-USDT-SWAP".to_string()),
|
|
1739
|
+
("side".to_string(), "1".to_string()),
|
|
1740
|
+
("type".to_string(), "5".to_string()),
|
|
1741
|
+
("openType".to_string(), "1".to_string()),
|
|
1742
|
+
("vol".to_string(), "10".to_string())
|
|
1743
|
+
]
|
|
1744
|
+
);
|
|
1745
|
+
|
|
1746
|
+
let margin = client.change_contract_margin("123", "10", "ADD");
|
|
1747
|
+
assert_eq!(
|
|
1748
|
+
margin.params,
|
|
1749
|
+
vec![
|
|
1750
|
+
("positionId".to_string(), "123".to_string()),
|
|
1751
|
+
("amount".to_string(), "10".to_string()),
|
|
1752
|
+
("type".to_string(), "ADD".to_string())
|
|
1753
|
+
]
|
|
1754
|
+
);
|
|
1755
|
+
}
|
|
1659
1756
|
}
|
|
1660
1757
|
|
|
1661
1758
|
pub mod aster;
|
|
@@ -7,6 +7,10 @@ use crate::{DcexError, Result};
|
|
|
7
7
|
#[path = "product_table_fetch.rs"]
|
|
8
8
|
mod fetch;
|
|
9
9
|
|
|
10
|
+
type UniqueIndex = HashMap<String, HashMap<String, Option<usize>>>;
|
|
11
|
+
type MultiIndex = HashMap<String, HashMap<String, Vec<usize>>>;
|
|
12
|
+
type TypedUniqueIndex = HashMap<String, HashMap<String, HashMap<String, Option<usize>>>>;
|
|
13
|
+
|
|
10
14
|
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
|
|
11
15
|
pub struct MarketInfo {
|
|
12
16
|
pub exchange: String,
|
|
@@ -44,10 +48,10 @@ pub struct ProductFilter<'a> {
|
|
|
44
48
|
#[derive(Clone, Debug, Default)]
|
|
45
49
|
pub struct ProductTable {
|
|
46
50
|
rows: Vec<MarketInfo>,
|
|
47
|
-
by_exchange_product:
|
|
48
|
-
by_exchange_exchange_symbol:
|
|
49
|
-
by_exchange_exchange_symbol_product_type:
|
|
50
|
-
by_exchange_exchange_symbol_exchange_type:
|
|
51
|
+
by_exchange_product: UniqueIndex,
|
|
52
|
+
by_exchange_exchange_symbol: MultiIndex,
|
|
53
|
+
by_exchange_exchange_symbol_product_type: TypedUniqueIndex,
|
|
54
|
+
by_exchange_exchange_symbol_exchange_type: TypedUniqueIndex,
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
impl ProductTable {
|
|
@@ -107,11 +111,8 @@ impl ProductTable {
|
|
|
107
111
|
}
|
|
108
112
|
|
|
109
113
|
pub fn get_exchange_symbol(&self, exchange: &str, product_symbol: &str) -> Result<String> {
|
|
110
|
-
match self
|
|
111
|
-
.
|
|
112
|
-
.get(&(exchange.to_string(), product_symbol.to_string()))
|
|
113
|
-
{
|
|
114
|
-
Some(Some(index)) => Ok(self.rows[*index].exchange_symbol.clone()),
|
|
114
|
+
match lookup_unique_index(&self.by_exchange_product, exchange, product_symbol) {
|
|
115
|
+
Some(Some(index)) => Ok(self.rows[index].exchange_symbol.clone()),
|
|
115
116
|
_ => self.get(
|
|
116
117
|
"exchange_symbol",
|
|
117
118
|
ProductFilter {
|
|
@@ -221,29 +222,28 @@ impl ProductTable {
|
|
|
221
222
|
for (index, row) in self.rows.iter().enumerate() {
|
|
222
223
|
insert_unique_index(
|
|
223
224
|
&mut self.by_exchange_product,
|
|
224
|
-
|
|
225
|
+
&row.exchange,
|
|
226
|
+
&row.product_symbol,
|
|
225
227
|
index,
|
|
226
228
|
);
|
|
227
|
-
|
|
228
|
-
.
|
|
229
|
-
.
|
|
230
|
-
.
|
|
231
|
-
|
|
229
|
+
insert_multi_index(
|
|
230
|
+
&mut self.by_exchange_exchange_symbol,
|
|
231
|
+
&row.exchange,
|
|
232
|
+
&row.exchange_symbol,
|
|
233
|
+
index,
|
|
234
|
+
);
|
|
235
|
+
insert_typed_unique_index(
|
|
232
236
|
&mut self.by_exchange_exchange_symbol_product_type,
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
row.product_type.clone(),
|
|
237
|
-
),
|
|
237
|
+
&row.exchange,
|
|
238
|
+
&row.exchange_symbol,
|
|
239
|
+
&row.product_type,
|
|
238
240
|
index,
|
|
239
241
|
);
|
|
240
|
-
|
|
242
|
+
insert_typed_unique_index(
|
|
241
243
|
&mut self.by_exchange_exchange_symbol_exchange_type,
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
row.exchange_type.clone(),
|
|
246
|
-
),
|
|
244
|
+
&row.exchange,
|
|
245
|
+
&row.exchange_symbol,
|
|
246
|
+
&row.exchange_type,
|
|
247
247
|
index,
|
|
248
248
|
);
|
|
249
249
|
}
|
|
@@ -256,38 +256,31 @@ impl ProductTable {
|
|
|
256
256
|
product_type: Option<&str>,
|
|
257
257
|
exchange_type: Option<&str>,
|
|
258
258
|
) -> Option<usize> {
|
|
259
|
-
|
|
260
|
-
(Some(product_type), None) =>
|
|
261
|
-
.by_exchange_exchange_symbol_product_type
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
.
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
exchange_symbol.to_string(),
|
|
283
|
-
product_type.to_string(),
|
|
284
|
-
))
|
|
285
|
-
.copied()
|
|
286
|
-
.flatten()
|
|
287
|
-
.filter(|index| self.rows[*index].exchange_type == exchange_type),
|
|
259
|
+
match (product_type, exchange_type) {
|
|
260
|
+
(Some(product_type), None) => lookup_typed_unique_index(
|
|
261
|
+
&self.by_exchange_exchange_symbol_product_type,
|
|
262
|
+
exchange,
|
|
263
|
+
exchange_symbol,
|
|
264
|
+
product_type,
|
|
265
|
+
)
|
|
266
|
+
.flatten(),
|
|
267
|
+
(None, Some(exchange_type)) => lookup_typed_unique_index(
|
|
268
|
+
&self.by_exchange_exchange_symbol_exchange_type,
|
|
269
|
+
exchange,
|
|
270
|
+
exchange_symbol,
|
|
271
|
+
exchange_type,
|
|
272
|
+
)
|
|
273
|
+
.flatten(),
|
|
274
|
+
(Some(product_type), Some(exchange_type)) => lookup_typed_unique_index(
|
|
275
|
+
&self.by_exchange_exchange_symbol_product_type,
|
|
276
|
+
exchange,
|
|
277
|
+
exchange_symbol,
|
|
278
|
+
product_type,
|
|
279
|
+
)
|
|
280
|
+
.flatten()
|
|
281
|
+
.filter(|index| self.rows[*index].exchange_type == exchange_type),
|
|
288
282
|
(None, None) => None,
|
|
289
|
-
}
|
|
290
|
-
index
|
|
283
|
+
}
|
|
291
284
|
}
|
|
292
285
|
|
|
293
286
|
fn get_product_field(
|
|
@@ -301,9 +294,8 @@ impl ProductTable {
|
|
|
301
294
|
return self.get_product_value(key, exchange, product_symbol);
|
|
302
295
|
}
|
|
303
296
|
if let Some(exchange_symbol) = exchange_symbol {
|
|
304
|
-
if let Some(indexes) =
|
|
305
|
-
.by_exchange_exchange_symbol
|
|
306
|
-
.get(&(exchange.to_string(), exchange_symbol.to_string()))
|
|
297
|
+
if let Some(indexes) =
|
|
298
|
+
lookup_multi_index(&self.by_exchange_exchange_symbol, exchange, exchange_symbol)
|
|
307
299
|
{
|
|
308
300
|
if indexes.len() == 1 {
|
|
309
301
|
return row_value(&self.rows[indexes[0]], key)
|
|
@@ -333,11 +325,8 @@ impl ProductTable {
|
|
|
333
325
|
}
|
|
334
326
|
|
|
335
327
|
fn unique_product(&self, exchange: &str, product_symbol: &str) -> Result<&MarketInfo> {
|
|
336
|
-
match self
|
|
337
|
-
.
|
|
338
|
-
.get(&(exchange.to_string(), product_symbol.to_string()))
|
|
339
|
-
{
|
|
340
|
-
Some(Some(index)) => Ok(&self.rows[*index]),
|
|
328
|
+
match lookup_unique_index(&self.by_exchange_product, exchange, product_symbol) {
|
|
329
|
+
Some(Some(index)) => Ok(&self.rows[index]),
|
|
341
330
|
_ => {
|
|
342
331
|
let matches = self
|
|
343
332
|
.rows
|
|
@@ -378,17 +367,62 @@ impl ProductTable {
|
|
|
378
367
|
}
|
|
379
368
|
}
|
|
380
369
|
|
|
381
|
-
fn insert_unique_index
|
|
382
|
-
index
|
|
383
|
-
|
|
370
|
+
fn insert_unique_index(index: &mut UniqueIndex, exchange: &str, symbol: &str, row_index: usize) {
|
|
371
|
+
index
|
|
372
|
+
.entry(exchange.to_string())
|
|
373
|
+
.or_default()
|
|
374
|
+
.entry(symbol.to_string())
|
|
375
|
+
.and_modify(|value| *value = None)
|
|
376
|
+
.or_insert(Some(row_index));
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
fn lookup_unique_index(index: &UniqueIndex, exchange: &str, symbol: &str) -> Option<Option<usize>> {
|
|
380
|
+
index.get(exchange)?.get(symbol).copied()
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
fn insert_multi_index(index: &mut MultiIndex, exchange: &str, symbol: &str, row_index: usize) {
|
|
384
|
+
index
|
|
385
|
+
.entry(exchange.to_string())
|
|
386
|
+
.or_default()
|
|
387
|
+
.entry(symbol.to_string())
|
|
388
|
+
.or_default()
|
|
389
|
+
.push(row_index);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
fn lookup_multi_index<'a>(
|
|
393
|
+
index: &'a MultiIndex,
|
|
394
|
+
exchange: &str,
|
|
395
|
+
symbol: &str,
|
|
396
|
+
) -> Option<&'a [usize]> {
|
|
397
|
+
index.get(exchange)?.get(symbol).map(Vec::as_slice)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
fn insert_typed_unique_index(
|
|
401
|
+
index: &mut TypedUniqueIndex,
|
|
402
|
+
exchange: &str,
|
|
403
|
+
symbol: &str,
|
|
404
|
+
kind: &str,
|
|
384
405
|
row_index: usize,
|
|
385
406
|
) {
|
|
386
407
|
index
|
|
387
|
-
.entry(
|
|
408
|
+
.entry(exchange.to_string())
|
|
409
|
+
.or_default()
|
|
410
|
+
.entry(symbol.to_string())
|
|
411
|
+
.or_default()
|
|
412
|
+
.entry(kind.to_string())
|
|
388
413
|
.and_modify(|value| *value = None)
|
|
389
414
|
.or_insert(Some(row_index));
|
|
390
415
|
}
|
|
391
416
|
|
|
417
|
+
fn lookup_typed_unique_index(
|
|
418
|
+
index: &TypedUniqueIndex,
|
|
419
|
+
exchange: &str,
|
|
420
|
+
symbol: &str,
|
|
421
|
+
kind: &str,
|
|
422
|
+
) -> Option<Option<usize>> {
|
|
423
|
+
index.get(exchange)?.get(symbol)?.get(kind).copied()
|
|
424
|
+
}
|
|
425
|
+
|
|
392
426
|
fn row_matches(row: &MarketInfo, filter: ProductFilter<'_>) -> bool {
|
|
393
427
|
filter
|
|
394
428
|
.product_symbol
|