diff --git a/.github/workflows/github-ci.yml b/.github/workflows/github-ci.yml index d2b1a2bd..b51e437f 100644 --- a/.github/workflows/github-ci.yml +++ b/.github/workflows/github-ci.yml @@ -2,6 +2,8 @@ name: CI on: push: + branches: + - main tags: - v* pull_request: @@ -34,8 +36,8 @@ jobs: ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-test - - run: cargo test --all-features + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - run: cargo test --tests --all-features rust-clippy-analyze: name: Run rust-clippy analyzing @@ -83,6 +85,7 @@ jobs: engine_io: runs-on: ubuntu-latest + needs: [test] strategy: matrix: engineio-version: [v3, v4] @@ -112,8 +115,8 @@ jobs: - name: Install deps & run tests run: | cd engine.io-protocol/test-suite && npm install && cd ../.. - cargo build --bin engineioxide-e2e --release --features ${{ matrix.engineio-version }} - cargo run --bin engineioxide-e2e --release --features ${{ matrix.engineio-version }} > server.txt & npm --prefix engine.io-protocol/test-suite test > client.txt + cargo build --bin engineioxide-e2e --features ${{ matrix.engineio-version }} --release + cargo run --bin engineioxide-e2e --features ${{ matrix.engineio-version }} --release > server.txt & npm --prefix engine.io-protocol/test-suite test > client.txt - name: Server output if: always() run: cat server.txt @@ -123,6 +126,7 @@ jobs: socket_io: runs-on: ubuntu-latest + needs: [test] strategy: matrix: socketio-version: [v4, v5] @@ -151,11 +155,30 @@ jobs: - name: Install deps & run tests run: | cd socket.io-protocol/test-suite && npm install && cd ../.. - cargo build --bin socketioxide-e2e --release --features ${{ matrix.socketio-version }} - cargo run --bin socketioxide-e2e --release --features ${{ matrix.socketio-version }} > server.txt & npm --prefix socket.io-protocol/test-suite test > client.txt + cargo build --bin socketioxide-e2e --features ${{ matrix.socketio-version }} --release + cargo run --bin socketioxide-e2e --features ${{ matrix.socketio-version }} --release > server.txt & npm --prefix socket.io-protocol/test-suite test > client.txt - name: Server output if: always() run: cat server.txt - name: Client output if: always() - run: cat client.txt \ No newline at end of file + run: cat client.txt + + doctest: + runs-on: ubuntu-latest + needs: [engine_io, socket_io, test] + steps: + - uses: actions/checkout@v3 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - run: cargo test --doc --all-features \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index ebf362bb..9c07851e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,11 +26,23 @@ dependencies = [ "memchr", ] +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", @@ -109,9 +121,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "bitflags" @@ -121,9 +133,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "block-buffer" @@ -134,6 +146,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + [[package]] name = "byteorder" version = "1.5.0" @@ -146,6 +164,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cc" version = "1.0.83" @@ -161,15 +185,136 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "ciborium" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +dependencies = [ + "anstyle", + "clap_lex", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -187,7 +332,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.1", + "hashbrown 0.14.2", "lock_api", "once_cell", "parking_lot_core", @@ -280,6 +425,16 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "errno" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "fnv" version = "1.0.7" @@ -297,9 +452,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -312,9 +467,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -322,15 +477,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -339,15 +494,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", @@ -356,21 +511,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -430,6 +585,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "hashbrown" version = "0.12.3" @@ -438,9 +599,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" [[package]] name = "headers" @@ -529,7 +690,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -556,6 +717,26 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix", + "windows-sys", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.11.0" @@ -571,6 +752,15 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -584,10 +774,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] -name = "lock_api" +name = "linux-raw-sys" version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -620,6 +816,15 @@ version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.17" @@ -647,9 +852,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "wasi", @@ -684,6 +889,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.16.0" @@ -709,6 +923,12 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + [[package]] name = "overload" version = "0.1.1" @@ -727,9 +947,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", @@ -776,6 +996,34 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -830,25 +1078,45 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "regex" -version = "1.10.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d119d7c7ca818f8a53c300863d4f87566aac09943aef5b355bb83969dae75d87" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.1", - "regex-syntax 0.8.0", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -862,13 +1130,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465c6fc0621e4abc4187a2bda0937bfd4f722c2730b29562e19689ea796c9a4b" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.0", + "regex-syntax 0.8.2", ] [[package]] @@ -879,9 +1147,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3cbb081b9784b07cceb8824c8583f86db4814d172ab043f3c23f7dc600bf83d" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rustc-demangle" @@ -889,6 +1157,19 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustix" +version = "0.38.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustls-pemfile" version = "1.0.3" @@ -910,6 +1191,15 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -924,18 +1214,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" dependencies = [ "proc-macro2", "quote", @@ -1021,9 +1311,9 @@ checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -1031,9 +1321,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys", @@ -1078,13 +1368,14 @@ name = "socketioxide" version = "0.6.0" dependencies = [ "axum", + "criterion", "dashmap", "engineioxide", "futures", "http", "http-body", "hyper", - "itertools", + "itertools 0.11.0", "serde", "serde_json", "thiserror", @@ -1133,18 +1424,18 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "thiserror" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", @@ -1161,6 +1452,16 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -1190,7 +1491,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", + "socket2 0.5.5", "tokio-macros", "windows-sys", ] @@ -1231,9 +1532,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -1265,7 +1566,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "bytes", "futures-core", "futures-util", @@ -1291,11 +1592,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -1304,9 +1604,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", @@ -1315,9 +1615,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -1325,12 +1625,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -1448,6 +1748,16 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -1494,6 +1804,70 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" + +[[package]] +name = "web-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1510,6 +1884,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/engineioxide/src/sid.rs b/engineioxide/src/sid.rs index 24406fc5..0cd4e99f 100644 --- a/engineioxide/src/sid.rs +++ b/engineioxide/src/sid.rs @@ -11,6 +11,7 @@ use rand::Rng; pub struct Sid([u8; 16]); impl Sid { + pub const ZERO: Self = Self([0u8; 16]); /// Generate a new random session id (base64 10 chars) pub fn new() -> Self { Self::default() diff --git a/examples/chat/Cargo.toml b/examples/chat/Cargo.toml index 5dc1ffdb..2b5f4204 100644 --- a/examples/chat/Cargo.toml +++ b/examples/chat/Cargo.toml @@ -17,6 +17,6 @@ serde = "1.0.188" serde_json = "1.0.107" futures = "0.3.28" -[[example]] +[[bin]] name = "chat" path = "src/main.rs" diff --git a/socketioxide/Cargo.toml b/socketioxide/Cargo.toml index 892897b5..02df44b5 100644 --- a/socketioxide/Cargo.toml +++ b/socketioxide/Cargo.toml @@ -4,6 +4,7 @@ version = "0.6.0" edition = "2021" rust-version = "1.63.0" + authors = ["Théodore Prévot <"] description = "Socket IO server implementation in rust as a Tower Service." repository = "https://github.com/totodore/socketioxide" @@ -17,6 +18,7 @@ categories = [ license = "MIT" readme = "../README.md" + [dependencies] engineioxide = { path = "../engineioxide", version = "0.6.0", default-features = false } futures = "0.3.27" @@ -39,6 +41,7 @@ tracing = { version = "0.1.37", optional = true } default = ["v5"] v5 = ["engineioxide/v4"] v4 = ["engineioxide/v3"] +test-utils = [] tracing = ["dep:tracing", "engineioxide/tracing"] extensions = ["dep:dashmap"] @@ -64,3 +67,13 @@ hyper = { version = "0.14.25", features = [ "runtime", "client", ] } +criterion = { version = "0.5.1", features = ["html_reports"] } + +[[bench]] +name = "packet_encode" +path = "benches/packet_encode.rs" +harness = false +[[bench]] +name = "packet_decode" +path = "benches/packet_decode.rs" +harness = false diff --git a/socketioxide/benches/packet_decode.rs b/socketioxide/benches/packet_decode.rs new file mode 100644 index 00000000..9f0fd378 --- /dev/null +++ b/socketioxide/benches/packet_decode.rs @@ -0,0 +1,161 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use engineioxide::sid::Sid; +use socketioxide::{Packet, PacketData, ProtocolVersion}; +fn criterion_benchmark(c: &mut Criterion) { + c.bench_function("Decode packet connect on /", |b| { + let packet: String = Packet::connect( + black_box("/").to_string(), + black_box(Sid::ZERO), + ProtocolVersion::V5, + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + c.bench_function("Decode packet connect on /custom_nsp", |b| { + let packet: String = Packet::connect( + black_box("/custom_nsp").to_string(), + black_box(Sid::ZERO), + ProtocolVersion::V5, + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + const DATA: &str = r#"{"_placeholder":true,"num":0}"#; + const BINARY: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + c.bench_function("Decode packet event on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::event( + black_box("/").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet event on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::event( + black_box("custom_nsp").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet event with ack on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: Packet = Packet::event( + black_box("/").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ); + match packet.inner { + PacketData::Event(_, _, mut ack) => ack.insert(black_box(0)), + _ => panic!("Wrong packet type"), + }; + let packet: String = packet.try_into().unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet event with ack on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::event( + black_box("/custom_nsp").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ); + match packet.inner { + PacketData::Event(_, _, mut ack) => ack.insert(black_box(0)), + _ => panic!("Wrong packet type"), + }; + let packet: String = packet.try_into().unwrap(); + + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet ack on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::ack( + black_box("/").to_string(), + black_box(data.clone()), + black_box(0), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet ack on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::ack( + black_box("/custom_nsp").to_string(), + black_box(data.clone()), + black_box(0), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet binary event (b64) on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::bin_event( + black_box("/").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet binary event (b64) on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::bin_event( + black_box("/custom_nsp").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet binary ack (b64) on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::bin_ack( + black_box("/").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + black_box(0), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); + + c.bench_function("Decode packet binary ack (b64) on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet: String = Packet::bin_ack( + black_box("/custom_nsp").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + black_box(0), + ) + .try_into() + .unwrap(); + b.iter(|| Packet::try_from(packet.clone()).unwrap()) + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/socketioxide/benches/packet_encode.rs b/socketioxide/benches/packet_encode.rs new file mode 100644 index 00000000..271633f4 --- /dev/null +++ b/socketioxide/benches/packet_encode.rs @@ -0,0 +1,162 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use engineioxide::sid::Sid; +use socketioxide::{Packet, PacketData, ProtocolVersion}; +fn criterion_benchmark(c: &mut Criterion) { + c.bench_function("Encode packet connect on /", |b| { + let packet = Packet::connect( + black_box("/").to_string(), + black_box(Sid::ZERO), + ProtocolVersion::V5, + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + c.bench_function("Encode packet connect on /custom_nsp", |b| { + let packet = Packet::connect( + black_box("/custom_nsp").to_string(), + black_box(Sid::ZERO), + ProtocolVersion::V5, + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + const DATA: &str = r#"{"_placeholder":true,"num":0}"#; + const BINARY: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + c.bench_function("Encode packet event on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::event( + black_box("/").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet event on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::event( + black_box("custom_nsp").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet event with ack on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::event( + black_box("/").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ); + match packet.inner { + PacketData::Event(_, _, mut ack) => ack.insert(black_box(0)), + _ => panic!("Wrong packet type"), + }; + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet event with ack on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::event( + black_box("/custom_nsp").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + ); + match packet.inner { + PacketData::Event(_, _, mut ack) => ack.insert(black_box(0)), + _ => panic!("Wrong packet type"), + }; + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet ack on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::ack( + black_box("/").to_string(), + black_box(data.clone()), + black_box(0), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet ack on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::ack( + black_box("/custom_nsp").to_string(), + black_box(data.clone()), + black_box(0), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet binary event (b64) on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::bin_event( + black_box("/").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet binary event (b64) on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::bin_event( + black_box("/custom_nsp").to_string(), + black_box("event").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet binary ack (b64) on /", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::bin_ack( + black_box("/").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + black_box(0), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); + + c.bench_function("Encode packet binary ack (b64) on /custom_nsp", |b| { + let data = serde_json::to_value(DATA).unwrap(); + let packet = Packet::bin_ack( + black_box("/custom_nsp").to_string(), + black_box(data.clone()), + black_box(vec![BINARY.to_vec().clone()]), + black_box(0), + ); + b.iter(|| { + let _: String = packet.clone().try_into().unwrap(); + }) + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/socketioxide/src/lib.rs b/socketioxide/src/lib.rs index ff2459df..eab877c2 100644 --- a/socketioxide/src/lib.rs +++ b/socketioxide/src/lib.rs @@ -76,6 +76,9 @@ pub mod extensions; pub mod layer; pub mod service; +#[cfg(feature = "test-utils")] +pub use packet::*; + pub use engineioxide::config::TransportType; pub use errors::{AckError, AckSenderError, BroadcastError, Error as SocketError, SendError}; pub use io::{SocketIo, SocketIoBuilder, SocketIoConfig};