| { | ||
| "git": { | ||
| "sha1": "7f81bafe0e76bcdb84f3069d81d56d77a7a24280" | ||
| "sha1": "1cd75a169d7148e27acd270bc3665f359de9df57" | ||
| }, | ||
| "path_in_vcs": "" | ||
| } |
@@ -54,2 +54,8 @@ version: '2.1' | ||
| - run: | ||
| name: Build main target | ||
| # update first to select dependencies appropriate for this toolchain | ||
| command: | | ||
| cargo update | ||
| cargo build | ||
| - run: | ||
| name: Check formatting | ||
@@ -69,5 +75,2 @@ command: | | ||
| - run: | ||
| name: Build main target | ||
| command: cargo build | ||
| - run: | ||
| name: Build all targets | ||
@@ -74,0 +77,0 @@ command: | |
+807
-132
@@ -21,11 +21,163 @@ # This file is automatically @generated by Cargo. | ||
| [[package]] | ||
| name = "ansi_term" | ||
| version = "0.12.1" | ||
| name = "async-attributes" | ||
| version = "1.1.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" | ||
| checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" | ||
| dependencies = [ | ||
| "winapi", | ||
| "quote", | ||
| "syn 1.0.109", | ||
| ] | ||
| [[package]] | ||
| name = "async-channel" | ||
| version = "1.9.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" | ||
| dependencies = [ | ||
| "concurrent-queue", | ||
| "event-listener 2.5.3", | ||
| "futures-core", | ||
| ] | ||
| [[package]] | ||
| name = "async-channel" | ||
| version = "2.1.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" | ||
| dependencies = [ | ||
| "concurrent-queue", | ||
| "event-listener 4.0.3", | ||
| "event-listener-strategy", | ||
| "futures-core", | ||
| "pin-project-lite", | ||
| ] | ||
| [[package]] | ||
| name = "async-executor" | ||
| version = "1.8.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" | ||
| dependencies = [ | ||
| "async-lock 3.2.0", | ||
| "async-task", | ||
| "concurrent-queue", | ||
| "fastrand 2.0.1", | ||
| "futures-lite 2.2.0", | ||
| "slab", | ||
| ] | ||
| [[package]] | ||
| name = "async-global-executor" | ||
| version = "2.4.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" | ||
| dependencies = [ | ||
| "async-channel 2.1.1", | ||
| "async-executor", | ||
| "async-io 2.2.2", | ||
| "async-lock 3.2.0", | ||
| "blocking", | ||
| "futures-lite 2.2.0", | ||
| "once_cell", | ||
| ] | ||
| [[package]] | ||
| name = "async-io" | ||
| version = "1.13.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" | ||
| dependencies = [ | ||
| "async-lock 2.8.0", | ||
| "autocfg", | ||
| "cfg-if", | ||
| "concurrent-queue", | ||
| "futures-lite 1.13.0", | ||
| "log", | ||
| "parking", | ||
| "polling 2.8.0", | ||
| "rustix 0.37.27", | ||
| "slab", | ||
| "socket2", | ||
| "waker-fn", | ||
| ] | ||
| [[package]] | ||
| name = "async-io" | ||
| version = "2.2.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" | ||
| dependencies = [ | ||
| "async-lock 3.2.0", | ||
| "cfg-if", | ||
| "concurrent-queue", | ||
| "futures-io", | ||
| "futures-lite 2.2.0", | ||
| "parking", | ||
| "polling 3.3.1", | ||
| "rustix 0.38.28", | ||
| "slab", | ||
| "tracing", | ||
| "windows-sys 0.52.0", | ||
| ] | ||
| [[package]] | ||
| name = "async-lock" | ||
| version = "2.8.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" | ||
| dependencies = [ | ||
| "event-listener 2.5.3", | ||
| ] | ||
| [[package]] | ||
| name = "async-lock" | ||
| version = "3.2.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" | ||
| dependencies = [ | ||
| "event-listener 4.0.3", | ||
| "event-listener-strategy", | ||
| "pin-project-lite", | ||
| ] | ||
| [[package]] | ||
| name = "async-std" | ||
| version = "1.12.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" | ||
| dependencies = [ | ||
| "async-attributes", | ||
| "async-channel 1.9.0", | ||
| "async-global-executor", | ||
| "async-io 1.13.0", | ||
| "async-lock 2.8.0", | ||
| "crossbeam-utils", | ||
| "futures-channel", | ||
| "futures-core", | ||
| "futures-io", | ||
| "futures-lite 1.13.0", | ||
| "gloo-timers", | ||
| "kv-log-macro", | ||
| "log", | ||
| "memchr", | ||
| "once_cell", | ||
| "pin-project-lite", | ||
| "pin-utils", | ||
| "slab", | ||
| "wasm-bindgen-futures", | ||
| ] | ||
| [[package]] | ||
| name = "async-task" | ||
| version = "4.7.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" | ||
| [[package]] | ||
| name = "atomic-waker" | ||
| version = "1.1.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" | ||
| [[package]] | ||
| name = "atty" | ||
@@ -36,3 +188,3 @@ version = "0.2.14" | ||
| dependencies = [ | ||
| "hermit-abi", | ||
| "hermit-abi 0.1.19", | ||
| "libc", | ||
@@ -50,10 +202,11 @@ "winapi", | ||
| name = "base64" | ||
| version = "0.21.5" | ||
| version = "0.21.6" | ||
| dependencies = [ | ||
| "clap", | ||
| "criterion", | ||
| "lazy_static", | ||
| "once_cell", | ||
| "rand", | ||
| "rstest", | ||
| "rstest_reuse", | ||
| "structopt", | ||
| "strum", | ||
| ] | ||
@@ -68,2 +221,24 @@ | ||
| [[package]] | ||
| name = "bitflags" | ||
| version = "2.4.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" | ||
| [[package]] | ||
| name = "blocking" | ||
| version = "1.5.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" | ||
| dependencies = [ | ||
| "async-channel 2.1.1", | ||
| "async-lock 3.2.0", | ||
| "async-task", | ||
| "fastrand 2.0.1", | ||
| "futures-io", | ||
| "futures-lite 2.2.0", | ||
| "piper", | ||
| "tracing", | ||
| ] | ||
| [[package]] | ||
| name = "bumpalo" | ||
@@ -115,25 +290,28 @@ version = "3.14.0" | ||
| name = "clap" | ||
| version = "2.34.0" | ||
| version = "3.2.25" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" | ||
| checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" | ||
| dependencies = [ | ||
| "ansi_term", | ||
| "atty", | ||
| "bitflags", | ||
| "bitflags 1.3.2", | ||
| "clap_derive", | ||
| "clap_lex", | ||
| "indexmap", | ||
| "once_cell", | ||
| "strsim", | ||
| "textwrap 0.11.0", | ||
| "unicode-width", | ||
| "vec_map", | ||
| "termcolor", | ||
| "textwrap", | ||
| ] | ||
| [[package]] | ||
| name = "clap" | ||
| name = "clap_derive" | ||
| version = "3.2.25" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" | ||
| checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" | ||
| dependencies = [ | ||
| "bitflags", | ||
| "clap_lex", | ||
| "indexmap", | ||
| "textwrap 0.16.0", | ||
| "heck", | ||
| "proc-macro-error", | ||
| "proc-macro2", | ||
| "quote", | ||
| "syn 1.0.109", | ||
| ] | ||
@@ -151,2 +329,11 @@ | ||
| [[package]] | ||
| name = "concurrent-queue" | ||
| version = "2.4.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" | ||
| dependencies = [ | ||
| "crossbeam-utils", | ||
| ] | ||
| [[package]] | ||
| name = "criterion" | ||
@@ -161,3 +348,3 @@ version = "0.4.0" | ||
| "ciborium", | ||
| "clap 3.2.25", | ||
| "clap", | ||
| "criterion-plot", | ||
@@ -190,7 +377,6 @@ "itertools", | ||
| name = "crossbeam-deque" | ||
| version = "0.8.3" | ||
| version = "0.8.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" | ||
| checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" | ||
| dependencies = [ | ||
| "cfg-if", | ||
| "crossbeam-epoch", | ||
@@ -202,11 +388,7 @@ "crossbeam-utils", | ||
| name = "crossbeam-epoch" | ||
| version = "0.9.15" | ||
| version = "0.9.18" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" | ||
| checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" | ||
| dependencies = [ | ||
| "autocfg", | ||
| "cfg-if", | ||
| "crossbeam-utils", | ||
| "memoffset", | ||
| "scopeguard", | ||
| ] | ||
@@ -216,8 +398,5 @@ | ||
| name = "crossbeam-utils" | ||
| version = "0.8.16" | ||
| version = "0.8.19" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" | ||
| dependencies = [ | ||
| "cfg-if", | ||
| ] | ||
| checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" | ||
@@ -231,6 +410,181 @@ [[package]] | ||
| [[package]] | ||
| name = "errno" | ||
| version = "0.3.8" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" | ||
| dependencies = [ | ||
| "libc", | ||
| "windows-sys 0.52.0", | ||
| ] | ||
| [[package]] | ||
| name = "event-listener" | ||
| version = "2.5.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" | ||
| [[package]] | ||
| name = "event-listener" | ||
| version = "4.0.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" | ||
| dependencies = [ | ||
| "concurrent-queue", | ||
| "parking", | ||
| "pin-project-lite", | ||
| ] | ||
| [[package]] | ||
| name = "event-listener-strategy" | ||
| version = "0.4.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" | ||
| dependencies = [ | ||
| "event-listener 4.0.3", | ||
| "pin-project-lite", | ||
| ] | ||
| [[package]] | ||
| name = "fastrand" | ||
| version = "1.9.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" | ||
| dependencies = [ | ||
| "instant", | ||
| ] | ||
| [[package]] | ||
| name = "fastrand" | ||
| version = "2.0.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" | ||
| [[package]] | ||
| name = "futures" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" | ||
| dependencies = [ | ||
| "futures-channel", | ||
| "futures-core", | ||
| "futures-executor", | ||
| "futures-io", | ||
| "futures-sink", | ||
| "futures-task", | ||
| "futures-util", | ||
| ] | ||
| [[package]] | ||
| name = "futures-channel" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" | ||
| dependencies = [ | ||
| "futures-core", | ||
| "futures-sink", | ||
| ] | ||
| [[package]] | ||
| name = "futures-core" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" | ||
| [[package]] | ||
| name = "futures-executor" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" | ||
| dependencies = [ | ||
| "futures-core", | ||
| "futures-task", | ||
| "futures-util", | ||
| ] | ||
| [[package]] | ||
| name = "futures-io" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" | ||
| [[package]] | ||
| name = "futures-lite" | ||
| version = "1.13.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" | ||
| dependencies = [ | ||
| "fastrand 1.9.0", | ||
| "futures-core", | ||
| "futures-io", | ||
| "memchr", | ||
| "parking", | ||
| "pin-project-lite", | ||
| "waker-fn", | ||
| ] | ||
| [[package]] | ||
| name = "futures-lite" | ||
| version = "2.2.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" | ||
| dependencies = [ | ||
| "fastrand 2.0.1", | ||
| "futures-core", | ||
| "futures-io", | ||
| "parking", | ||
| "pin-project-lite", | ||
| ] | ||
| [[package]] | ||
| name = "futures-macro" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" | ||
| dependencies = [ | ||
| "proc-macro2", | ||
| "quote", | ||
| "syn 2.0.48", | ||
| ] | ||
| [[package]] | ||
| name = "futures-sink" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" | ||
| [[package]] | ||
| name = "futures-task" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" | ||
| [[package]] | ||
| name = "futures-timer" | ||
| version = "3.0.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" | ||
| [[package]] | ||
| name = "futures-util" | ||
| version = "0.3.30" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" | ||
| dependencies = [ | ||
| "futures-channel", | ||
| "futures-core", | ||
| "futures-io", | ||
| "futures-macro", | ||
| "futures-sink", | ||
| "futures-task", | ||
| "memchr", | ||
| "pin-project-lite", | ||
| "pin-utils", | ||
| "slab", | ||
| ] | ||
| [[package]] | ||
| name = "getrandom" | ||
| version = "0.2.10" | ||
| version = "0.2.11" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" | ||
| checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" | ||
| dependencies = [ | ||
@@ -243,2 +597,14 @@ "cfg-if", | ||
| [[package]] | ||
| name = "gloo-timers" | ||
| version = "0.2.6" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" | ||
| dependencies = [ | ||
| "futures-channel", | ||
| "futures-core", | ||
| "js-sys", | ||
| "wasm-bindgen", | ||
| ] | ||
| [[package]] | ||
| name = "half" | ||
@@ -257,8 +623,5 @@ version = "1.8.2" | ||
| name = "heck" | ||
| version = "0.3.3" | ||
| version = "0.4.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" | ||
| dependencies = [ | ||
| "unicode-segmentation", | ||
| ] | ||
| checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" | ||
@@ -275,2 +638,8 @@ [[package]] | ||
| [[package]] | ||
| name = "hermit-abi" | ||
| version = "0.3.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" | ||
| [[package]] | ||
| name = "indexmap" | ||
@@ -286,2 +655,22 @@ version = "1.9.3" | ||
| [[package]] | ||
| name = "instant" | ||
| version = "0.1.12" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" | ||
| dependencies = [ | ||
| "cfg-if", | ||
| ] | ||
| [[package]] | ||
| name = "io-lifetimes" | ||
| version = "1.0.11" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" | ||
| dependencies = [ | ||
| "hermit-abi 0.3.3", | ||
| "libc", | ||
| "windows-sys 0.48.0", | ||
| ] | ||
| [[package]] | ||
| name = "itertools" | ||
@@ -297,11 +686,11 @@ version = "0.10.5" | ||
| name = "itoa" | ||
| version = "1.0.9" | ||
| version = "1.0.10" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" | ||
| checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" | ||
| [[package]] | ||
| name = "js-sys" | ||
| version = "0.3.64" | ||
| version = "0.3.66" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" | ||
| checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" | ||
| dependencies = [ | ||
@@ -312,2 +701,11 @@ "wasm-bindgen", | ||
| [[package]] | ||
| name = "kv-log-macro" | ||
| version = "1.0.7" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" | ||
| dependencies = [ | ||
| "log", | ||
| ] | ||
| [[package]] | ||
| name = "lazy_static" | ||
@@ -320,28 +718,34 @@ version = "1.4.0" | ||
| name = "libc" | ||
| version = "0.2.149" | ||
| version = "0.2.152" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" | ||
| checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" | ||
| [[package]] | ||
| name = "log" | ||
| version = "0.4.20" | ||
| name = "linux-raw-sys" | ||
| version = "0.3.8" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" | ||
| checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" | ||
| [[package]] | ||
| name = "memchr" | ||
| version = "2.6.4" | ||
| name = "linux-raw-sys" | ||
| version = "0.4.12" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" | ||
| checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" | ||
| [[package]] | ||
| name = "memoffset" | ||
| version = "0.9.0" | ||
| name = "log" | ||
| version = "0.4.20" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" | ||
| checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" | ||
| dependencies = [ | ||
| "autocfg", | ||
| "value-bag", | ||
| ] | ||
| [[package]] | ||
| name = "memchr" | ||
| version = "2.7.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" | ||
| [[package]] | ||
| name = "num-traits" | ||
@@ -357,5 +761,5 @@ version = "0.2.17" | ||
| name = "once_cell" | ||
| version = "1.18.0" | ||
| version = "1.19.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" | ||
| checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" | ||
@@ -375,2 +779,31 @@ [[package]] | ||
| [[package]] | ||
| name = "parking" | ||
| version = "2.2.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" | ||
| [[package]] | ||
| name = "pin-project-lite" | ||
| version = "0.2.13" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" | ||
| [[package]] | ||
| name = "pin-utils" | ||
| version = "0.1.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" | ||
| [[package]] | ||
| name = "piper" | ||
| version = "0.2.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" | ||
| dependencies = [ | ||
| "atomic-waker", | ||
| "fastrand 2.0.1", | ||
| "futures-io", | ||
| ] | ||
| [[package]] | ||
| name = "plotters" | ||
@@ -404,2 +837,32 @@ version = "0.3.5" | ||
| [[package]] | ||
| name = "polling" | ||
| version = "2.8.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" | ||
| dependencies = [ | ||
| "autocfg", | ||
| "bitflags 1.3.2", | ||
| "cfg-if", | ||
| "concurrent-queue", | ||
| "libc", | ||
| "log", | ||
| "pin-project-lite", | ||
| "windows-sys 0.48.0", | ||
| ] | ||
| [[package]] | ||
| name = "polling" | ||
| version = "3.3.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e" | ||
| dependencies = [ | ||
| "cfg-if", | ||
| "concurrent-queue", | ||
| "pin-project-lite", | ||
| "rustix 0.38.28", | ||
| "tracing", | ||
| "windows-sys 0.52.0", | ||
| ] | ||
| [[package]] | ||
| name = "ppv-lite86" | ||
@@ -436,5 +899,5 @@ version = "0.2.17" | ||
| name = "proc-macro2" | ||
| version = "1.0.69" | ||
| version = "1.0.76" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" | ||
| checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" | ||
| dependencies = [ | ||
@@ -446,5 +909,5 @@ "unicode-ident", | ||
| name = "quote" | ||
| version = "1.0.33" | ||
| version = "1.0.35" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" | ||
| checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" | ||
| dependencies = [ | ||
@@ -535,6 +998,19 @@ "proc-macro2", | ||
| name = "rstest" | ||
| version = "0.12.0" | ||
| version = "0.13.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d912f35156a3f99a66ee3e11ac2e0b3f34ac85a07e05263d05a7e2c8810d616f" | ||
| checksum = "b939295f93cb1d12bc1a83cf9ee963199b133fb8a79832dd51b68bb9f59a04dc" | ||
| dependencies = [ | ||
| "async-std", | ||
| "futures", | ||
| "futures-timer", | ||
| "rstest_macros", | ||
| "rustc_version", | ||
| ] | ||
| [[package]] | ||
| name = "rstest_macros" | ||
| version = "0.13.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f78aba848123782ba59340928ec7d876ebe745aa0365d6af8a630f19a5c16116" | ||
| dependencies = [ | ||
| "cfg-if", | ||
@@ -549,9 +1025,10 @@ "proc-macro2", | ||
| name = "rstest_reuse" | ||
| version = "0.3.0" | ||
| version = "0.6.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "b29d3117bce27ea307d1fb7ce12c64ba11b3fd04311a42d32bc5f0072e6e3d4d" | ||
| checksum = "88530b681abe67924d42cca181d070e3ac20e0740569441a9e35a7cedd2b34a4" | ||
| dependencies = [ | ||
| "quote", | ||
| "rand", | ||
| "rustc_version", | ||
| "syn 1.0.109", | ||
| "syn 2.0.48", | ||
| ] | ||
@@ -569,6 +1046,39 @@ | ||
| [[package]] | ||
| name = "rustix" | ||
| version = "0.37.27" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" | ||
| dependencies = [ | ||
| "bitflags 1.3.2", | ||
| "errno", | ||
| "io-lifetimes", | ||
| "libc", | ||
| "linux-raw-sys 0.3.8", | ||
| "windows-sys 0.48.0", | ||
| ] | ||
| [[package]] | ||
| name = "rustix" | ||
| version = "0.38.28" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" | ||
| dependencies = [ | ||
| "bitflags 2.4.1", | ||
| "errno", | ||
| "libc", | ||
| "linux-raw-sys 0.4.12", | ||
| "windows-sys 0.52.0", | ||
| ] | ||
| [[package]] | ||
| name = "rustversion" | ||
| version = "1.0.14" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" | ||
| [[package]] | ||
| name = "ryu" | ||
| version = "1.0.15" | ||
| version = "1.0.16" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" | ||
| checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" | ||
@@ -585,18 +1095,12 @@ [[package]] | ||
| [[package]] | ||
| name = "scopeguard" | ||
| version = "1.2.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" | ||
| [[package]] | ||
| name = "semver" | ||
| version = "1.0.20" | ||
| version = "1.0.21" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" | ||
| checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" | ||
| [[package]] | ||
| name = "serde" | ||
| version = "1.0.189" | ||
| version = "1.0.195" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" | ||
| checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" | ||
| dependencies = [ | ||
@@ -608,9 +1112,9 @@ "serde_derive", | ||
| name = "serde_derive" | ||
| version = "1.0.189" | ||
| version = "1.0.195" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" | ||
| checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" | ||
| dependencies = [ | ||
| "proc-macro2", | ||
| "quote", | ||
| "syn 2.0.38", | ||
| "syn 2.0.48", | ||
| ] | ||
@@ -620,5 +1124,5 @@ | ||
| name = "serde_json" | ||
| version = "1.0.107" | ||
| version = "1.0.111" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" | ||
| checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" | ||
| dependencies = [ | ||
@@ -631,29 +1135,46 @@ "itoa", | ||
| [[package]] | ||
| name = "slab" | ||
| version = "0.4.9" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" | ||
| dependencies = [ | ||
| "autocfg", | ||
| ] | ||
| [[package]] | ||
| name = "socket2" | ||
| version = "0.4.10" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" | ||
| dependencies = [ | ||
| "libc", | ||
| "winapi", | ||
| ] | ||
| [[package]] | ||
| name = "strsim" | ||
| version = "0.8.0" | ||
| version = "0.10.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" | ||
| checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" | ||
| [[package]] | ||
| name = "structopt" | ||
| version = "0.3.26" | ||
| name = "strum" | ||
| version = "0.25.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" | ||
| checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" | ||
| dependencies = [ | ||
| "clap 2.34.0", | ||
| "lazy_static", | ||
| "structopt-derive", | ||
| "strum_macros", | ||
| ] | ||
| [[package]] | ||
| name = "structopt-derive" | ||
| version = "0.4.18" | ||
| name = "strum_macros" | ||
| version = "0.25.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" | ||
| checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" | ||
| dependencies = [ | ||
| "heck", | ||
| "proc-macro-error", | ||
| "proc-macro2", | ||
| "quote", | ||
| "syn 1.0.109", | ||
| "rustversion", | ||
| "syn 2.0.48", | ||
| ] | ||
@@ -674,5 +1195,5 @@ | ||
| name = "syn" | ||
| version = "2.0.38" | ||
| version = "2.0.48" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" | ||
| checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" | ||
| dependencies = [ | ||
@@ -685,8 +1206,8 @@ "proc-macro2", | ||
| [[package]] | ||
| name = "textwrap" | ||
| version = "0.11.0" | ||
| name = "termcolor" | ||
| version = "1.4.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" | ||
| checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" | ||
| dependencies = [ | ||
| "unicode-width", | ||
| "winapi-util", | ||
| ] | ||
@@ -711,24 +1232,28 @@ | ||
| [[package]] | ||
| name = "unicode-ident" | ||
| version = "1.0.12" | ||
| name = "tracing" | ||
| version = "0.1.40" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" | ||
| checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" | ||
| dependencies = [ | ||
| "pin-project-lite", | ||
| "tracing-core", | ||
| ] | ||
| [[package]] | ||
| name = "unicode-segmentation" | ||
| version = "1.10.1" | ||
| name = "tracing-core" | ||
| version = "0.1.32" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" | ||
| checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" | ||
| [[package]] | ||
| name = "unicode-width" | ||
| version = "0.1.11" | ||
| name = "unicode-ident" | ||
| version = "1.0.12" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" | ||
| checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" | ||
| [[package]] | ||
| name = "vec_map" | ||
| version = "0.8.2" | ||
| name = "value-bag" | ||
| version = "1.5.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" | ||
| checksum = "dd65ff0de3304a013e6dfeb7324e1cd389a8a000e582e3c9c9fae82ced778e26" | ||
@@ -742,2 +1267,8 @@ [[package]] | ||
| [[package]] | ||
| name = "waker-fn" | ||
| version = "1.1.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" | ||
| [[package]] | ||
| name = "walkdir" | ||
@@ -760,5 +1291,5 @@ version = "2.4.0" | ||
| name = "wasm-bindgen" | ||
| version = "0.2.87" | ||
| version = "0.2.89" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" | ||
| checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" | ||
| dependencies = [ | ||
@@ -771,5 +1302,5 @@ "cfg-if", | ||
| name = "wasm-bindgen-backend" | ||
| version = "0.2.87" | ||
| version = "0.2.89" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" | ||
| checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" | ||
| dependencies = [ | ||
@@ -781,3 +1312,3 @@ "bumpalo", | ||
| "quote", | ||
| "syn 2.0.38", | ||
| "syn 2.0.48", | ||
| "wasm-bindgen-shared", | ||
@@ -787,6 +1318,18 @@ ] | ||
| [[package]] | ||
| name = "wasm-bindgen-futures" | ||
| version = "0.4.39" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" | ||
| dependencies = [ | ||
| "cfg-if", | ||
| "js-sys", | ||
| "wasm-bindgen", | ||
| "web-sys", | ||
| ] | ||
| [[package]] | ||
| name = "wasm-bindgen-macro" | ||
| version = "0.2.87" | ||
| version = "0.2.89" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" | ||
| checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" | ||
| dependencies = [ | ||
@@ -799,9 +1342,9 @@ "quote", | ||
| name = "wasm-bindgen-macro-support" | ||
| version = "0.2.87" | ||
| version = "0.2.89" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" | ||
| checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" | ||
| dependencies = [ | ||
| "proc-macro2", | ||
| "quote", | ||
| "syn 2.0.38", | ||
| "syn 2.0.48", | ||
| "wasm-bindgen-backend", | ||
@@ -813,11 +1356,11 @@ "wasm-bindgen-shared", | ||
| name = "wasm-bindgen-shared" | ||
| version = "0.2.87" | ||
| version = "0.2.89" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" | ||
| checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" | ||
| [[package]] | ||
| name = "web-sys" | ||
| version = "0.3.64" | ||
| version = "0.3.66" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" | ||
| checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" | ||
| dependencies = [ | ||
@@ -858,1 +1401,133 @@ "js-sys", | ||
| checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | ||
| [[package]] | ||
| name = "windows-sys" | ||
| version = "0.48.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" | ||
| dependencies = [ | ||
| "windows-targets 0.48.5", | ||
| ] | ||
| [[package]] | ||
| name = "windows-sys" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" | ||
| dependencies = [ | ||
| "windows-targets 0.52.0", | ||
| ] | ||
| [[package]] | ||
| name = "windows-targets" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" | ||
| dependencies = [ | ||
| "windows_aarch64_gnullvm 0.48.5", | ||
| "windows_aarch64_msvc 0.48.5", | ||
| "windows_i686_gnu 0.48.5", | ||
| "windows_i686_msvc 0.48.5", | ||
| "windows_x86_64_gnu 0.48.5", | ||
| "windows_x86_64_gnullvm 0.48.5", | ||
| "windows_x86_64_msvc 0.48.5", | ||
| ] | ||
| [[package]] | ||
| name = "windows-targets" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" | ||
| dependencies = [ | ||
| "windows_aarch64_gnullvm 0.52.0", | ||
| "windows_aarch64_msvc 0.52.0", | ||
| "windows_i686_gnu 0.52.0", | ||
| "windows_i686_msvc 0.52.0", | ||
| "windows_x86_64_gnu 0.52.0", | ||
| "windows_x86_64_gnullvm 0.52.0", | ||
| "windows_x86_64_msvc 0.52.0", | ||
| ] | ||
| [[package]] | ||
| name = "windows_aarch64_gnullvm" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" | ||
| [[package]] | ||
| name = "windows_aarch64_gnullvm" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" | ||
| [[package]] | ||
| name = "windows_aarch64_msvc" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" | ||
| [[package]] | ||
| name = "windows_aarch64_msvc" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" | ||
| [[package]] | ||
| name = "windows_i686_gnu" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" | ||
| [[package]] | ||
| name = "windows_i686_gnu" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" | ||
| [[package]] | ||
| name = "windows_i686_msvc" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" | ||
| [[package]] | ||
| name = "windows_i686_msvc" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" | ||
| [[package]] | ||
| name = "windows_x86_64_gnu" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" | ||
| [[package]] | ||
| name = "windows_x86_64_gnu" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" | ||
| [[package]] | ||
| name = "windows_x86_64_gnullvm" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" | ||
| [[package]] | ||
| name = "windows_x86_64_gnullvm" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" | ||
| [[package]] | ||
| name = "windows_x86_64_msvc" | ||
| version = "0.48.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" | ||
| [[package]] | ||
| name = "windows_x86_64_msvc" | ||
| version = "0.52.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" |
+12
-7
@@ -16,3 +16,3 @@ # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO | ||
| name = "base64" | ||
| version = "0.21.5" | ||
| version = "0.21.6" | ||
| authors = [ | ||
@@ -62,7 +62,11 @@ "Alice Maz <alice@alicemaz.com>", | ||
| [dev-dependencies.clap] | ||
| version = "3.2.25" | ||
| features = ["derive"] | ||
| [dev-dependencies.criterion] | ||
| version = "0.4.0" | ||
| [dev-dependencies.lazy_static] | ||
| version = "1.4.0" | ||
| [dev-dependencies.once_cell] | ||
| version = "1" | ||
@@ -74,9 +78,10 @@ [dev-dependencies.rand] | ||
| [dev-dependencies.rstest] | ||
| version = "0.12.0" | ||
| version = "0.13.0" | ||
| [dev-dependencies.rstest_reuse] | ||
| version = "0.3.0" | ||
| version = "0.6.0" | ||
| [dev-dependencies.structopt] | ||
| version = "0.3.26" | ||
| [dev-dependencies.strum] | ||
| version = "0.25" | ||
| features = ["derive"] | ||
@@ -83,0 +88,0 @@ [features] |
+21
-29
@@ -5,9 +5,10 @@ use std::fs::File; | ||
| use std::process; | ||
| use std::str::FromStr; | ||
| use base64::{alphabet, engine, read, write}; | ||
| use structopt::StructOpt; | ||
| use clap::Parser; | ||
| #[derive(Debug, StructOpt)] | ||
| #[derive(Clone, Debug, Parser, strum::EnumString, Default)] | ||
| #[strum(serialize_all = "kebab-case")] | ||
| enum Alphabet { | ||
| #[default] | ||
| Standard, | ||
@@ -17,31 +18,19 @@ UrlSafe, | ||
| impl Default for Alphabet { | ||
| fn default() -> Self { | ||
| Self::Standard | ||
| } | ||
| } | ||
| impl FromStr for Alphabet { | ||
| type Err = String; | ||
| fn from_str(s: &str) -> Result<Self, String> { | ||
| match s { | ||
| "standard" => Ok(Self::Standard), | ||
| "urlsafe" => Ok(Self::UrlSafe), | ||
| _ => Err(format!("alphabet '{}' unrecognized", s)), | ||
| } | ||
| } | ||
| } | ||
| /// Base64 encode or decode FILE (or standard input), to standard output. | ||
| #[derive(Debug, StructOpt)] | ||
| #[derive(Debug, Parser)] | ||
| struct Opt { | ||
| /// decode data | ||
| #[structopt(short = "d", long = "decode")] | ||
| /// Decode the base64-encoded input (default: encode the input as base64). | ||
| #[structopt(short = 'd', long = "decode")] | ||
| decode: bool, | ||
| /// The alphabet to choose. Defaults to the standard base64 alphabet. | ||
| /// Supported alphabets include "standard" and "urlsafe". | ||
| /// The encoding alphabet: "standard" (default) or "url-safe". | ||
| #[structopt(long = "alphabet")] | ||
| alphabet: Option<Alphabet>, | ||
| /// The file to encode/decode. | ||
| #[structopt(parse(from_os_str))] | ||
| /// Omit padding characters while encoding, and reject them while decoding. | ||
| #[structopt(short = 'p', long = "no-padding")] | ||
| no_padding: bool, | ||
| /// The file to encode or decode. | ||
| #[structopt(name = "FILE", parse(from_os_str))] | ||
| file: Option<PathBuf>, | ||
@@ -51,3 +40,3 @@ } | ||
| fn main() { | ||
| let opt = Opt::from_args(); | ||
| let opt = Opt::parse(); | ||
| let stdin; | ||
@@ -72,3 +61,6 @@ let mut input: Box<dyn Read> = match opt.file { | ||
| }, | ||
| engine::general_purpose::PAD, | ||
| match opt.no_padding { | ||
| true => engine::general_purpose::NO_PAD, | ||
| false => engine::general_purpose::PAD, | ||
| }, | ||
| ); | ||
@@ -75,0 +67,0 @@ |
+4
-0
@@ -0,1 +1,5 @@ | ||
| # 0.21.6 | ||
| - Improved introductory documentation and example | ||
| # 0.21.5 | ||
@@ -2,0 +6,0 @@ |
+11
-10
@@ -41,3 +41,3 @@ //! Provides [Alphabet] and constants for alphabets commonly used in the wild. | ||
| /// | ||
| /// Building a lazy_static: | ||
| /// Building lazily: | ||
| /// | ||
@@ -49,6 +49,7 @@ /// ``` | ||
| /// }; | ||
| /// use once_cell::sync::Lazy; | ||
| /// | ||
| /// lazy_static::lazy_static! { | ||
| /// static ref CUSTOM: Alphabet = Alphabet::new("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/").unwrap(); | ||
| /// } | ||
| /// static CUSTOM: Lazy<Alphabet> = Lazy::new(|| | ||
| /// Alphabet::new("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/").unwrap() | ||
| /// ); | ||
| /// ``` | ||
@@ -164,5 +165,5 @@ #[derive(Clone, Debug, Eq, PartialEq)] | ||
| /// The standard alphabet (uses `+` and `/`). | ||
| /// The standard alphabet (with `+` and `/`) specified in [RFC 4648][]. | ||
| /// | ||
| /// See [RFC 3548](https://tools.ietf.org/html/rfc3548#section-3). | ||
| /// [RFC 4648]: https://datatracker.ietf.org/doc/html/rfc4648#section-4 | ||
| pub const STANDARD: Alphabet = Alphabet::from_str_unchecked( | ||
@@ -172,5 +173,5 @@ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", | ||
| /// The URL safe alphabet (uses `-` and `_`). | ||
| /// The URL-safe alphabet (with `-` and `_`) specified in [RFC 4648][]. | ||
| /// | ||
| /// See [RFC 3548](https://tools.ietf.org/html/rfc3548#section-4). | ||
| /// [RFC 4648]: https://datatracker.ietf.org/doc/html/rfc4648#section-5 | ||
| pub const URL_SAFE: Alphabet = Alphabet::from_str_unchecked( | ||
@@ -180,3 +181,3 @@ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_", | ||
| /// The `crypt(3)` alphabet (uses `.` and `/` as the first two values). | ||
| /// The `crypt(3)` alphabet (with `.` and `/` as the _first_ two characters). | ||
| /// | ||
@@ -193,3 +194,3 @@ /// Not standardized, but folk wisdom on the net asserts that this alphabet is what crypt uses. | ||
| /// The alphabet used in IMAP-modified UTF-7 (uses `+` and `,`). | ||
| /// The alphabet used in IMAP-modified UTF-7 (with `+` and `,`). | ||
| /// | ||
@@ -196,0 +197,0 @@ /// See [RFC 3501](https://tools.ietf.org/html/rfc3501#section-5.1.3) |
+2
-1
@@ -101,3 +101,4 @@ #[cfg(any(feature = "alloc", test))] | ||
| let complete_input_chunks = bytes_len / 3; | ||
| // `let Some(_) = _ else` requires 1.65.0, whereas this messier one works on 1.48 | ||
| // `?` is disallowed in const, and `let Some(_) = _ else` requires 1.65.0, whereas this | ||
| // messier syntax works on 1.48 | ||
| let complete_chunk_output = | ||
@@ -104,0 +105,0 @@ if let Some(complete_chunk_output) = complete_input_chunks.checked_mul(4) { |
+164
-65
@@ -1,99 +0,123 @@ | ||
| //! # Getting started | ||
| //! Correct, fast, and configurable [base64][] decoding and encoding. Base64 | ||
| //! transports binary data efficiently in contexts where only plain text is | ||
| //! allowed. | ||
| //! | ||
| //! 1. Perhaps one of the preconfigured engines in [engine::general_purpose] will suit, e.g. | ||
| //! [engine::general_purpose::STANDARD_NO_PAD]. | ||
| //! - These are re-exported in [prelude] with a `BASE64_` prefix for those who prefer to | ||
| //! `use base64::prelude::*` or equivalent, e.g. [prelude::BASE64_STANDARD_NO_PAD] | ||
| //! 1. If not, choose which alphabet you want. Most usage will want [alphabet::STANDARD] or [alphabet::URL_SAFE]. | ||
| //! 1. Choose which [Engine] implementation you want. For the moment there is only one: [engine::GeneralPurpose]. | ||
| //! 1. Configure the engine appropriately using the engine's `Config` type. | ||
| //! - This is where you'll select whether to add padding (when encoding) or expect it (when | ||
| //! decoding). If given the choice, prefer no padding. | ||
| //! 1. Build the engine using the selected alphabet and config. | ||
| //! [base64]: https://developer.mozilla.org/en-US/docs/Glossary/Base64 | ||
| //! | ||
| //! For more detail, see below. | ||
| //! # Usage | ||
| //! | ||
| //! ## Alphabets | ||
| //! Use an [`Engine`] to decode or encode base64, configured with the base64 | ||
| //! alphabet and padding behavior best suited to your application. | ||
| //! | ||
| //! An [alphabet::Alphabet] defines what ASCII symbols are used to encode to or decode from. | ||
| //! ## Engine setup | ||
| //! | ||
| //! Constants in [alphabet] like [alphabet::STANDARD] or [alphabet::URL_SAFE] provide commonly used | ||
| //! alphabets, but you can also build your own custom [alphabet::Alphabet] if needed. | ||
| //! There is more than one way to encode a stream of bytes as “base64”. | ||
| //! Different applications use different encoding | ||
| //! [alphabets][alphabet::Alphabet] and | ||
| //! [padding behaviors][engine::general_purpose::GeneralPurposeConfig]. | ||
| //! | ||
| //! ## Engines | ||
| //! ### Encoding alphabet | ||
| //! | ||
| //! Once you have an `Alphabet`, you can pick which `Engine` you want. A few parts of the public | ||
| //! API provide a default, but otherwise the user must provide an `Engine` to use. | ||
| //! Almost all base64 [alphabets][alphabet::Alphabet] use `A-Z`, `a-z`, and | ||
| //! `0-9`, which gives nearly 64 characters (26 + 26 + 10 = 62), but they differ | ||
| //! in their choice of their final 2. | ||
| //! | ||
| //! See [Engine] for more. | ||
| //! Most applications use the [standard][alphabet::STANDARD] alphabet specified | ||
| //! in [RFC 4648][rfc-alphabet]. If that’s all you need, you can get started | ||
| //! quickly by using the pre-configured | ||
| //! [`STANDARD`][engine::general_purpose::STANDARD] engine, which is also available | ||
| //! in the [`prelude`] module as shown here, if you prefer a minimal `use` | ||
| //! footprint. | ||
| //! | ||
| //! ## Config | ||
| #![cfg_attr(feature = "alloc", doc = "```")] | ||
| #![cfg_attr(not(feature = "alloc"), doc = "```ignore")] | ||
| //! use base64::prelude::*; | ||
| //! | ||
| //! In addition to an `Alphabet`, constructing an `Engine` also requires an [engine::Config]. Each | ||
| //! `Engine` has a corresponding `Config` implementation since different `Engine`s may offer different | ||
| //! levels of configurability. | ||
| //! # fn main() -> Result<(), base64::DecodeError> { | ||
| //! assert_eq!(BASE64_STANDARD.decode(b"+uwgVQA=")?, b"\xFA\xEC\x20\x55\0"); | ||
| //! assert_eq!(BASE64_STANDARD.encode(b"\xFF\xEC\x20\x55\0"), "/+wgVQA="); | ||
| //! # Ok(()) | ||
| //! # } | ||
| //! ``` | ||
| //! | ||
| //! # Encoding | ||
| //! [rfc-alphabet]: https://datatracker.ietf.org/doc/html/rfc4648#section-4 | ||
| //! | ||
| //! Several different encoding methods on [Engine] are available to you depending on your desire for | ||
| //! convenience vs performance. | ||
| //! Other common alphabets are available in the [`alphabet`] module. | ||
| //! | ||
| //! | Method | Output | Allocates | | ||
| //! | ------------------------ | ---------------------------- | ------------------------------ | | ||
| //! | [Engine::encode] | Returns a new `String` | Always | | ||
| //! | [Engine::encode_string] | Appends to provided `String` | Only if `String` needs to grow | | ||
| //! | [Engine::encode_slice] | Writes to provided `&[u8]` | Never - fastest | | ||
| //! #### URL-safe alphabet | ||
| //! | ||
| //! All of the encoding methods will pad as per the engine's config. | ||
| //! The standard alphabet uses `+` and `/` as its two non-alphanumeric tokens, | ||
| //! which cannot be safely used in URL’s without encoding them as `%2B` and | ||
| //! `%2F`. | ||
| //! | ||
| //! # Decoding | ||
| //! To avoid that, some applications use a [“URL-safe” alphabet][alphabet::URL_SAFE], | ||
| //! which uses `-` and `_` instead. To use that alternative alphabet, use the | ||
| //! [`URL_SAFE`][engine::general_purpose::URL_SAFE] engine. This example doesn't | ||
| //! use [`prelude`] to show what a more explicit `use` would look like. | ||
| //! | ||
| //! Just as for encoding, there are different decoding methods available. | ||
| #![cfg_attr(feature = "alloc", doc = "```")] | ||
| #![cfg_attr(not(feature = "alloc"), doc = "```ignore")] | ||
| //! use base64::{engine::general_purpose::URL_SAFE, Engine as _}; | ||
| //! | ||
| //! | Method | Output | Allocates | | ||
| //! | ------------------------ | ----------------------------- | ------------------------------ | | ||
| //! | [Engine::decode] | Returns a new `Vec<u8>` | Always | | ||
| //! | [Engine::decode_vec] | Appends to provided `Vec<u8>` | Only if `Vec` needs to grow | | ||
| //! | [Engine::decode_slice] | Writes to provided `&[u8]` | Never - fastest | | ||
| //! # fn main() -> Result<(), base64::DecodeError> { | ||
| //! assert_eq!(URL_SAFE.decode(b"-uwgVQA=")?, b"\xFA\xEC\x20\x55\0"); | ||
| //! assert_eq!(URL_SAFE.encode(b"\xFF\xEC\x20\x55\0"), "_-wgVQA="); | ||
| //! # Ok(()) | ||
| //! # } | ||
| //! ``` | ||
| //! | ||
| //! Unlike encoding, where all possible input is valid, decoding can fail (see [DecodeError]). | ||
| //! ### Padding characters | ||
| //! | ||
| //! Input can be invalid because it has invalid characters or invalid padding. The nature of how | ||
| //! padding is checked depends on the engine's config. | ||
| //! Whitespace in the input is invalid, just like any other non-base64 byte. | ||
| //! Each base64 character represents 6 bits (2⁶ = 64) of the original binary | ||
| //! data, and every 3 bytes of input binary data will encode to 4 base64 | ||
| //! characters (8 bits × 3 = 6 bits × 4 = 24 bits). | ||
| //! | ||
| //! # `Read` and `Write` | ||
| //! When the input is not an even multiple of 3 bytes in length, [canonical][] | ||
| //! base64 encoders insert padding characters at the end, so that the output | ||
| //! length is always a multiple of 4: | ||
| //! | ||
| //! To decode a [std::io::Read] of b64 bytes, wrap a reader (file, network socket, etc) with | ||
| //! [read::DecoderReader]. | ||
| //! [canonical]: https://datatracker.ietf.org/doc/html/rfc4648#section-3.5 | ||
| //! | ||
| //! To write raw bytes and have them b64 encoded on the fly, wrap a [std::io::Write] with | ||
| //! [write::EncoderWriter]. | ||
| #![cfg_attr(feature = "alloc", doc = "```")] | ||
| #![cfg_attr(not(feature = "alloc"), doc = "```ignore")] | ||
| //! use base64::{engine::general_purpose::STANDARD, Engine as _}; | ||
| //! | ||
| //! There is some performance overhead (15% or so) because of the necessary buffer shuffling -- | ||
| //! still fast enough that almost nobody cares. Also, these implementations do not heap allocate. | ||
| //! assert_eq!(STANDARD.encode(b""), ""); | ||
| //! assert_eq!(STANDARD.encode(b"f"), "Zg=="); | ||
| //! assert_eq!(STANDARD.encode(b"fo"), "Zm8="); | ||
| //! assert_eq!(STANDARD.encode(b"foo"), "Zm9v"); | ||
| //! ``` | ||
| //! | ||
| //! # `Display` | ||
| //! Canonical encoding ensures that base64 encodings will be exactly the same, | ||
| //! byte-for-byte, regardless of input length. But the `=` padding characters | ||
| //! aren’t necessary for decoding, and they may be omitted by using a | ||
| //! [`NO_PAD`][engine::general_purpose::NO_PAD] configuration: | ||
| //! | ||
| //! See [display] for how to transparently base64 data via a `Display` implementation. | ||
| #![cfg_attr(feature = "alloc", doc = "```")] | ||
| #![cfg_attr(not(feature = "alloc"), doc = "```ignore")] | ||
| //! use base64::{engine::general_purpose::STANDARD_NO_PAD, Engine as _}; | ||
| //! | ||
| //! # Examples | ||
| //! assert_eq!(STANDARD_NO_PAD.encode(b""), ""); | ||
| //! assert_eq!(STANDARD_NO_PAD.encode(b"f"), "Zg"); | ||
| //! assert_eq!(STANDARD_NO_PAD.encode(b"fo"), "Zm8"); | ||
| //! assert_eq!(STANDARD_NO_PAD.encode(b"foo"), "Zm9v"); | ||
| //! ``` | ||
| //! | ||
| //! ## Using predefined engines | ||
| //! The pre-configured `NO_PAD` engines will reject inputs containing padding | ||
| //! `=` characters. To encode without padding and still accept padding while | ||
| //! decoding, create an [engine][engine::general_purpose::GeneralPurpose] with | ||
| //! that [padding mode][engine::DecodePaddingMode]. | ||
| //! | ||
| #![cfg_attr(feature = "alloc", doc = "```")] | ||
| #![cfg_attr(not(feature = "alloc"), doc = "```ignore")] | ||
| //! use base64::{Engine as _, engine::general_purpose}; | ||
| //! # use base64::{engine::general_purpose::STANDARD_NO_PAD, Engine as _}; | ||
| //! assert_eq!(STANDARD_NO_PAD.decode(b"Zm8="), Err(base64::DecodeError::InvalidPadding)); | ||
| //! ``` | ||
| //! | ||
| //! let orig = b"data"; | ||
| //! let encoded: String = general_purpose::STANDARD_NO_PAD.encode(orig); | ||
| //! assert_eq!("ZGF0YQ", encoded); | ||
| //! assert_eq!(orig.as_slice(), &general_purpose::STANDARD_NO_PAD.decode(encoded).unwrap()); | ||
| //! ### Further customization | ||
| //! | ||
| //! // or, URL-safe | ||
| //! let encoded_url = general_purpose::URL_SAFE_NO_PAD.encode(orig); | ||
| //! ``` | ||
| //! Decoding and encoding behavior can be customized by creating an | ||
| //! [engine][engine::GeneralPurpose] with an [alphabet][alphabet::Alphabet] and | ||
| //! [padding configuration][engine::GeneralPurposeConfig]: | ||
| //! | ||
| //! ## Custom alphabet, config, and engine | ||
| //! | ||
| #![cfg_attr(feature = "alloc", doc = "```")] | ||
@@ -120,2 +144,77 @@ #![cfg_attr(not(feature = "alloc"), doc = "```ignore")] | ||
| //! | ||
| //! ## Memory allocation | ||
| //! | ||
| //! The [decode][Engine::decode()] and [encode][Engine::encode()] engine methods | ||
| //! allocate memory for their results – `decode` returns a `Vec<u8>` and | ||
| //! `encode` returns a `String`. To instead decode or encode into a buffer that | ||
| //! you allocated, use one of the alternative methods: | ||
| //! | ||
| //! #### Decoding | ||
| //! | ||
| //! | Method | Output | Allocates memory | | ||
| //! | -------------------------- | ----------------------------- | ----------------------------- | | ||
| //! | [`Engine::decode`] | returns a new `Vec<u8>` | always | | ||
| //! | [`Engine::decode_vec`] | appends to provided `Vec<u8>` | if `Vec` lacks capacity | | ||
| //! | [`Engine::decode_slice`] | writes to provided `&[u8]` | never | ||
| //! | ||
| //! #### Encoding | ||
| //! | ||
| //! | Method | Output | Allocates memory | | ||
| //! | -------------------------- | ---------------------------- | ------------------------------ | | ||
| //! | [`Engine::encode`] | returns a new `String` | always | | ||
| //! | [`Engine::encode_string`] | appends to provided `String` | if `String` lacks capacity | | ||
| //! | [`Engine::encode_slice`] | writes to provided `&[u8]` | never | | ||
| //! | ||
| //! ## Input and output | ||
| //! | ||
| //! The `base64` crate can [decode][Engine::decode()] and | ||
| //! [encode][Engine::encode()] values in memory, or | ||
| //! [`DecoderReader`][read::DecoderReader] and | ||
| //! [`EncoderWriter`][write::EncoderWriter] provide streaming decoding and | ||
| //! encoding for any [readable][std::io::Read] or [writable][std::io::Write] | ||
| //! byte stream. | ||
| //! | ||
| //! #### Decoding | ||
| //! | ||
| #![cfg_attr(feature = "std", doc = "```")] | ||
| #![cfg_attr(not(feature = "std"), doc = "```ignore")] | ||
| //! # use std::io; | ||
| //! use base64::{engine::general_purpose::STANDARD, read::DecoderReader}; | ||
| //! | ||
| //! # fn main() -> Result<(), Box<dyn std::error::Error>> { | ||
| //! let mut input = io::stdin(); | ||
| //! let mut decoder = DecoderReader::new(&mut input, &STANDARD); | ||
| //! io::copy(&mut decoder, &mut io::stdout())?; | ||
| //! # Ok(()) | ||
| //! # } | ||
| //! ``` | ||
| //! | ||
| //! #### Encoding | ||
| //! | ||
| #![cfg_attr(feature = "std", doc = "```")] | ||
| #![cfg_attr(not(feature = "std"), doc = "```ignore")] | ||
| //! # use std::io; | ||
| //! use base64::{engine::general_purpose::STANDARD, write::EncoderWriter}; | ||
| //! | ||
| //! # fn main() -> Result<(), Box<dyn std::error::Error>> { | ||
| //! let mut output = io::stdout(); | ||
| //! let mut encoder = EncoderWriter::new(&mut output, &STANDARD); | ||
| //! io::copy(&mut io::stdin(), &mut encoder)?; | ||
| //! # Ok(()) | ||
| //! # } | ||
| //! ``` | ||
| //! | ||
| //! #### Display | ||
| //! | ||
| //! If you only need a base64 representation for implementing the | ||
| //! [`Display`][std::fmt::Display] trait, use | ||
| //! [`Base64Display`][display::Base64Display]: | ||
| //! | ||
| //! ``` | ||
| //! use base64::{display::Base64Display, engine::general_purpose::STANDARD}; | ||
| //! | ||
| //! let value = Base64Display::new(b"\0\x01\x02\x03", &STANDARD); | ||
| //! assert_eq!("base64: AAECAw==", format!("base64: {}", value)); | ||
| //! ``` | ||
| //! | ||
| //! # Panics | ||
@@ -122,0 +221,0 @@ //! |
Sorry, the diff of this file is not supported yet