aboutsummaryrefslogtreecommitdiff
path: root/vendor/anstream
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/anstream')
-rw-r--r--vendor/anstream/.cargo-checksum.json1
-rw-r--r--vendor/anstream/Cargo.lock1094
-rw-r--r--vendor/anstream/Cargo.toml144
-rw-r--r--vendor/anstream/LICENSE-APACHE202
-rw-r--r--vendor/anstream/LICENSE-MIT19
-rw-r--r--vendor/anstream/README.md34
-rw-r--r--vendor/anstream/benches/stream.rs81
-rw-r--r--vendor/anstream/benches/strip.rs102
-rw-r--r--vendor/anstream/benches/wincon.rs26
-rw-r--r--vendor/anstream/examples/dump-stream.rs128
-rw-r--r--vendor/anstream/examples/query-stream.rs20
-rw-r--r--vendor/anstream/src/adapter/mod.rs15
-rw-r--r--vendor/anstream/src/adapter/strip.rs513
-rw-r--r--vendor/anstream/src/adapter/wincon.rs320
-rw-r--r--vendor/anstream/src/auto.rs263
-rw-r--r--vendor/anstream/src/buffer.rs68
-rw-r--r--vendor/anstream/src/fmt.rs54
-rw-r--r--vendor/anstream/src/lib.rs79
-rw-r--r--vendor/anstream/src/macros.rs389
-rw-r--r--vendor/anstream/src/stream.rs261
-rw-r--r--vendor/anstream/src/strip.rs219
-rw-r--r--vendor/anstream/src/wincon.rs210
22 files changed, 0 insertions, 4242 deletions
diff --git a/vendor/anstream/.cargo-checksum.json b/vendor/anstream/.cargo-checksum.json
deleted file mode 100644
index 8c249ee..0000000
--- a/vendor/anstream/.cargo-checksum.json
+++ /dev/null
@@ -1 +0,0 @@
-{"files":{"Cargo.lock":"e89078a9d7e89f125bea210c74fd30ef1167c208b9b240baa3fe76ec1170f6ec","Cargo.toml":"38deb1bfcca1eaef87c409274c63f9b25df94f6faaebc74061fa7ef1e4f078f1","LICENSE-APACHE":"c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08","LICENSE-MIT":"6efb0476a1cc085077ed49357026d8c173bf33017278ef440f222fb9cbcb66e6","README.md":"b230c2257d0c7a49b9bd97f2fa73abedcdc055757b5cedd2b0eb1a7a448ff461","benches/stream.rs":"7e666c4f4b79ddb5237361ed25264a966ee241192fbb2c1baea3006e3e0326b4","benches/strip.rs":"9603bd5ca1ae4661c2ccab50315dbfdec0c661ac2624262172bbd8f5d0bd87c9","benches/wincon.rs":"680e86933c008b242a3286c5149c33d3c086426eb99fe134b6e79f7578f96663","examples/dump-stream.rs":"54b2bce2409fc1a1f00dbdcab7abbbb6cde447fa20b5c829d1b17ce2e15eefd1","examples/query-stream.rs":"16f38843083174fbefa974a5aa38a5f3ffa51bd6e6db3dc1d91164462219399e","src/adapter/mod.rs":"baf4237ea0b18df63609e49d93572ca27c2202a4cbec0220adb5a7e815c7d8ed","src/adapter/strip.rs":"010972f96708c56da9bced98287f134ce43a4f6459c22c1697abdc4fd6f82d00","src/adapter/wincon.rs":"07d75878ca9edcef4f473a5ff6113b40aab681dcbcd1ae9de1ec895332f7cc2a","src/auto.rs":"71c249ab6b0af64c3946817ea9f1719d4b789128c244611a05075b1e13413007","src/buffer.rs":"83e7088b50dd3e2941c06a417d9eef75fda45311a2912ba94f480ec98d6f0183","src/fmt.rs":"cc11b005c4559843bd908a57958a13c8d0922fae6aff5261f3583c90e60da73c","src/lib.rs":"649b86b187835e0e33baaaf2242c5f331b7dff133fae8fc419c52b7add797c57","src/macros.rs":"a26ababe32a39732d0aade9674f6e5e267bd26c6ea06603ff9e61e80681195e0","src/stream.rs":"cbe8f61fba4c3c60934339c8bda5d1ff43320f57cdc4ed409aa173945a941b3d","src/strip.rs":"56e6516283b6c0dfa72a8e0e6679da8424295f50a3e56c44281e76de6aa0344b","src/wincon.rs":"fe5aff7bfd80b14c9a6b07143079d59b81831293ad766b845e46fad2e1459c9a"},"package":"d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"} \ No newline at end of file
diff --git a/vendor/anstream/Cargo.lock b/vendor/anstream/Cargo.lock
deleted file mode 100644
index 2915b67..0000000
--- a/vendor/anstream/Cargo.lock
+++ /dev/null
@@ -1,1094 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "anes"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
-
-[[package]]
-name = "anstream"
-version = "0.6.5"
-dependencies = [
- "anstyle",
- "anstyle-parse",
- "anstyle-query",
- "anstyle-wincon",
- "colorchoice",
- "criterion",
- "lexopt",
- "owo-colors",
- "proptest",
- "strip-ansi-escapes",
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
-
-[[package]]
-name = "anstyle-parse"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
-dependencies = [
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle-query"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
-dependencies = [
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "anstyle-wincon"
-version = "3.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
-dependencies = [
- "anstyle",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "autocfg"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-
-[[package]]
-name = "bit-set"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
-dependencies = [
- "bit-vec",
-]
-
-[[package]]
-name = "bit-vec"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
-name = "bitflags"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
-
-[[package]]
-name = "bumpalo"
-version = "3.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
-
-[[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.79"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "ciborium"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f"
-dependencies = [
- "ciborium-io",
- "ciborium-ll",
- "serde",
-]
-
-[[package]]
-name = "ciborium-io"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369"
-
-[[package]]
-name = "ciborium-ll"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b"
-dependencies = [
- "ciborium-io",
- "half",
-]
-
-[[package]]
-name = "clap"
-version = "4.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272"
-dependencies = [
- "clap_builder",
-]
-
-[[package]]
-name = "clap_builder"
-version = "4.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1"
-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 = "colorchoice"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
-
-[[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",
- "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",
-]
-
-[[package]]
-name = "crossbeam-channel"
-version = "0.5.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
-]
-
-[[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.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
-dependencies = [
- "autocfg",
- "cfg-if",
- "crossbeam-utils",
- "memoffset",
- "scopeguard",
-]
-
-[[package]]
-name = "crossbeam-utils"
-version = "0.8.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "either"
-version = "1.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
-
-[[package]]
-name = "errno"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
-dependencies = [
- "errno-dragonfly",
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "errno"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
-dependencies = [
- "errno-dragonfly",
- "libc",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-dependencies = [
- "cc",
- "libc",
-]
-
-[[package]]
-name = "fastrand"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
-
-[[package]]
-name = "fnv"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-
-[[package]]
-name = "getrandom"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
-[[package]]
-name = "half"
-version = "1.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
-
-[[package]]
-name = "hermit-abi"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
-
-[[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.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
-dependencies = [
- "libc",
- "windows-sys 0.45.0",
-]
-
-[[package]]
-name = "is-terminal"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
-dependencies = [
- "hermit-abi 0.3.1",
- "rustix 0.38.11",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "itertools"
-version = "0.10.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "itoa"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
-
-[[package]]
-name = "js-sys"
-version = "0.3.61"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
-dependencies = [
- "wasm-bindgen",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "lexopt"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401"
-
-[[package]]
-name = "libc"
-version = "0.2.147"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
-
-[[package]]
-name = "libm"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
-
-[[package]]
-name = "log"
-version = "0.4.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "memoffset"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
-dependencies = [
- "autocfg",
- "libm",
-]
-
-[[package]]
-name = "num_cpus"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
-dependencies = [
- "hermit-abi 0.2.6",
- "libc",
-]
-
-[[package]]
-name = "once_cell"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
-
-[[package]]
-name = "oorandom"
-version = "11.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
-
-[[package]]
-name = "owo-colors"
-version = "3.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
-
-[[package]]
-name = "plotters"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
-dependencies = [
- "num-traits",
- "plotters-backend",
- "plotters-svg",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "plotters-backend"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
-
-[[package]]
-name = "plotters-svg"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
-dependencies = [
- "plotters-backend",
-]
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.56"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "proptest"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf"
-dependencies = [
- "bit-set",
- "bit-vec",
- "bitflags 2.4.0",
- "lazy_static",
- "num-traits",
- "rand",
- "rand_chacha",
- "rand_xorshift",
- "regex-syntax 0.8.2",
- "rusty-fork",
- "tempfile",
- "unarray",
-]
-
-[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
-[[package]]
-name = "quote"
-version = "1.0.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "rand"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-dependencies = [
- "libc",
- "rand_chacha",
- "rand_core",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "rand_xorshift"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
-dependencies = [
- "rand_core",
-]
-
-[[package]]
-name = "rayon"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7"
-dependencies = [
- "either",
- "rayon-core",
-]
-
-[[package]]
-name = "rayon-core"
-version = "1.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b"
-dependencies = [
- "crossbeam-channel",
- "crossbeam-deque",
- "crossbeam-utils",
- "num_cpus",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
-]
-
-[[package]]
-name = "regex"
-version = "1.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
-dependencies = [
- "regex-syntax 0.6.28",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
-
-[[package]]
-name = "regex-syntax"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
-
-[[package]]
-name = "rustix"
-version = "0.36.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
-dependencies = [
- "bitflags 1.3.2",
- "errno 0.2.8",
- "io-lifetimes",
- "libc",
- "linux-raw-sys 0.1.4",
- "windows-sys 0.45.0",
-]
-
-[[package]]
-name = "rustix"
-version = "0.38.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453"
-dependencies = [
- "bitflags 2.4.0",
- "errno 0.3.3",
- "libc",
- "linux-raw-sys 0.4.5",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "rusty-fork"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
-dependencies = [
- "fnv",
- "quick-error",
- "tempfile",
- "wait-timeout",
-]
-
-[[package]]
-name = "ryu"
-version = "1.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
-
-[[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 = "scopeguard"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-
-[[package]]
-name = "serde"
-version = "1.0.145"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.145"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.86"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "strip-ansi-escapes"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55ff8ef943b384c414f54aefa961dd2bd853add74ec75e7ac74cf91dba62bcfa"
-dependencies = [
- "vte",
-]
-
-[[package]]
-name = "syn"
-version = "1.0.102"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "tempfile"
-version = "3.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
-dependencies = [
- "cfg-if",
- "fastrand",
- "redox_syscall",
- "rustix 0.36.8",
- "windows-sys 0.42.0",
-]
-
-[[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 = "unarray"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
-
-[[package]]
-name = "utf8parse"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
-
-[[package]]
-name = "vte"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197"
-dependencies = [
- "utf8parse",
- "vte_generate_state_changes",
-]
-
-[[package]]
-name = "vte_generate_state_changes"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
-dependencies = [
- "proc-macro2",
- "quote",
-]
-
-[[package]]
-name = "wait-timeout"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "walkdir"
-version = "2.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
-dependencies = [
- "same-file",
- "winapi",
- "winapi-util",
-]
-
-[[package]]
-name = "wasi"
-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.84"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
-dependencies = [
- "cfg-if",
- "wasm-bindgen-macro",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.84"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
-dependencies = [
- "bumpalo",
- "log",
- "once_cell",
- "proc-macro2",
- "quote",
- "syn",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.84"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
-dependencies = [
- "quote",
- "wasm-bindgen-macro-support",
-]
-
-[[package]]
-name = "wasm-bindgen-macro-support"
-version = "0.2.84"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- "wasm-bindgen-backend",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-shared"
-version = "0.2.84"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
-
-[[package]]
-name = "web-sys"
-version = "0.3.61"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
-name = "windows-sys"
-version = "0.42.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
-dependencies = [
- "windows_aarch64_gnullvm 0.42.1",
- "windows_aarch64_msvc 0.42.1",
- "windows_i686_gnu 0.42.1",
- "windows_i686_msvc 0.42.1",
- "windows_x86_64_gnu 0.42.1",
- "windows_x86_64_gnullvm 0.42.1",
- "windows_x86_64_msvc 0.42.1",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.45.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
-dependencies = [
- "windows-targets 0.42.1",
-]
-
-[[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.0",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
-dependencies = [
- "windows_aarch64_gnullvm 0.42.1",
- "windows_aarch64_msvc 0.42.1",
- "windows_i686_gnu 0.42.1",
- "windows_i686_msvc 0.42.1",
- "windows_x86_64_gnu 0.42.1",
- "windows_x86_64_gnullvm 0.42.1",
- "windows_x86_64_msvc 0.42.1",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
-dependencies = [
- "windows_aarch64_gnullvm 0.48.0",
- "windows_aarch64_msvc 0.48.0",
- "windows_i686_gnu 0.48.0",
- "windows_i686_msvc 0.48.0",
- "windows_x86_64_gnu 0.48.0",
- "windows_x86_64_gnullvm 0.48.0",
- "windows_x86_64_msvc 0.48.0",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.42.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/vendor/anstream/Cargo.toml b/vendor/anstream/Cargo.toml
deleted file mode 100644
index a64ec8d..0000000
--- a/vendor/anstream/Cargo.toml
+++ /dev/null
@@ -1,144 +0,0 @@
-# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
-#
-# When uploading crates to the registry Cargo will automatically
-# "normalize" Cargo.toml files for maximal compatibility
-# with all versions of Cargo and also rewrite `path` dependencies
-# to registry (e.g., crates.io) dependencies.
-#
-# If you are reading this file be aware that the original Cargo.toml
-# will likely look very different (and much more reasonable).
-# See Cargo.toml.orig for the original contents.
-
-[package]
-edition = "2021"
-rust-version = "1.70.0"
-name = "anstream"
-version = "0.6.5"
-include = [
- "build.rs",
- "src/**/*",
- "Cargo.toml",
- "Cargo.lock",
- "LICENSE*",
- "README.md",
- "benches/**/*",
- "examples/**/*",
-]
-description = "A simple cross platform library for writing colored text to a terminal."
-homepage = "https://github.com/rust-cli/anstyle"
-readme = "README.md"
-keywords = [
- "ansi",
- "terminal",
- "color",
- "strip",
- "wincon",
-]
-categories = ["command-line-interface"]
-license = "MIT OR Apache-2.0"
-repository = "https://github.com/rust-cli/anstyle.git"
-
-[package.metadata.docs.rs]
-cargo-args = [
- "-Zunstable-options",
- "-Zrustdoc-scrape-examples",
-]
-rustdoc-args = [
- "--cfg",
- "docsrs",
-]
-
-[[package.metadata.release.pre-release-replacements]]
-file = "CHANGELOG.md"
-min = 1
-replace = "{{version}}"
-search = "Unreleased"
-
-[[package.metadata.release.pre-release-replacements]]
-exactly = 1
-file = "CHANGELOG.md"
-replace = "...{{tag_name}}"
-search = '\.\.\.HEAD'
-
-[[package.metadata.release.pre-release-replacements]]
-file = "CHANGELOG.md"
-min = 1
-replace = "{{date}}"
-search = "ReleaseDate"
-
-[[package.metadata.release.pre-release-replacements]]
-exactly = 1
-file = "CHANGELOG.md"
-replace = """
-<!-- next-header -->
-## [Unreleased] - ReleaseDate
-"""
-search = "<!-- next-header -->"
-
-[[package.metadata.release.pre-release-replacements]]
-exactly = 1
-file = "CHANGELOG.md"
-replace = """
-<!-- next-url -->
-[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD"""
-search = "<!-- next-url -->"
-
-[[bench]]
-name = "strip"
-harness = false
-
-[[bench]]
-name = "wincon"
-harness = false
-
-[[bench]]
-name = "stream"
-harness = false
-
-[dependencies.anstyle]
-version = "1.0.0"
-
-[dependencies.anstyle-parse]
-version = "0.2.0"
-
-[dependencies.anstyle-query]
-version = "1.0.0"
-optional = true
-
-[dependencies.colorchoice]
-version = "1.0.0"
-optional = true
-
-[dependencies.utf8parse]
-version = "0.2.1"
-
-[dev-dependencies.criterion]
-version = "0.5.1"
-
-[dev-dependencies.lexopt]
-version = "0.3.0"
-
-[dev-dependencies.owo-colors]
-version = "3.5.0"
-
-[dev-dependencies.proptest]
-version = "1.4.0"
-
-[dev-dependencies.strip-ansi-escapes]
-version = "0.2.0"
-
-[features]
-auto = [
- "dep:anstyle-query",
- "dep:colorchoice",
-]
-default = [
- "auto",
- "wincon",
-]
-test = []
-wincon = ["dep:anstyle-wincon"]
-
-[target."cfg(windows)".dependencies.anstyle-wincon]
-version = "3.0.1"
-optional = true
diff --git a/vendor/anstream/LICENSE-APACHE b/vendor/anstream/LICENSE-APACHE
deleted file mode 100644
index 8f71f43..0000000
--- a/vendor/anstream/LICENSE-APACHE
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
diff --git a/vendor/anstream/LICENSE-MIT b/vendor/anstream/LICENSE-MIT
deleted file mode 100644
index a2d0108..0000000
--- a/vendor/anstream/LICENSE-MIT
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) Individual contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/anstream/README.md b/vendor/anstream/README.md
deleted file mode 100644
index c3d9266..0000000
--- a/vendor/anstream/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# anstream
-
-> A simple cross platform library for writing colored text to a terminal.
-
-*A portmanteau of "ansi stream"*
-
-[![Documentation](https://img.shields.io/badge/docs-master-blue.svg)][Documentation]
-![License](https://img.shields.io/crates/l/anstream.svg)
-[![Crates Status](https://img.shields.io/crates/v/anstream.svg)](https://crates.io/crates/anstream)
-
-Specialized `stdout` and `stderr` that accept ANSI escape codes and adapt them
-based on the terminal's capabilities.
-
-`anstream::adapter::strip_str` may also be of interest on its own for low
-overhead stripping of ANSI escape codes.
-
-## License
-
-Licensed under either of
-
- * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
-
-at your option.
-
-### Contribution
-
-Unless you explicitly state otherwise, any contribution intentionally
-submitted for inclusion in the work by you, as defined in the Apache-2.0
-license, shall be dual licensed as above, without any additional terms or
-conditions.
-
-[Crates.io]: https://crates.io/crates/anstream
-[Documentation]: https://docs.rs/anstream
diff --git a/vendor/anstream/benches/stream.rs b/vendor/anstream/benches/stream.rs
deleted file mode 100644
index f89aacf..0000000
--- a/vendor/anstream/benches/stream.rs
+++ /dev/null
@@ -1,81 +0,0 @@
-use std::io::Write as _;
-
-use criterion::{black_box, Criterion};
-
-fn stream(c: &mut Criterion) {
- for (name, content) in [
- ("demo.vte", &include_bytes!("../tests/demo.vte")[..]),
- ("rg_help.vte", &include_bytes!("../tests/rg_help.vte")[..]),
- ("rg_linus.vte", &include_bytes!("../tests/rg_linus.vte")[..]),
- (
- "state_changes",
- &b"\x1b]2;X\x1b\\ \x1b[0m \x1bP0@\x1b\\"[..],
- ),
- ] {
- let mut group = c.benchmark_group(name);
- group.bench_function("nop", |b| {
- b.iter(|| {
- let buffer = Vec::with_capacity(content.len());
- let mut stream = buffer;
-
- stream.write_all(content).unwrap();
-
- black_box(stream)
- })
- });
- group.bench_function("StripStream", |b| {
- b.iter(|| {
- let buffer = Vec::with_capacity(content.len());
- let mut stream = anstream::StripStream::new(buffer);
-
- stream.write_all(content).unwrap();
-
- black_box(stream)
- })
- });
- #[cfg(all(windows, feature = "wincon"))]
- group.bench_function("WinconStream", |b| {
- b.iter(|| {
- let buffer = Vec::with_capacity(content.len());
- let mut stream = anstream::WinconStream::new(buffer);
-
- stream.write_all(content).unwrap();
-
- black_box(stream)
- })
- });
- group.bench_function("AutoStream::always_ansi", |b| {
- b.iter(|| {
- let buffer = Vec::with_capacity(content.len());
- let mut stream = anstream::AutoStream::always_ansi(buffer);
-
- stream.write_all(content).unwrap();
-
- black_box(stream)
- })
- });
- group.bench_function("AutoStream::always", |b| {
- b.iter(|| {
- let buffer = Vec::with_capacity(content.len());
- let mut stream = anstream::AutoStream::always(buffer);
-
- stream.write_all(content).unwrap();
-
- black_box(stream)
- })
- });
- group.bench_function("AutoStream::never", |b| {
- b.iter(|| {
- let buffer = Vec::with_capacity(content.len());
- let mut stream = anstream::AutoStream::never(buffer);
-
- stream.write_all(content).unwrap();
-
- black_box(stream)
- })
- });
- }
-}
-
-criterion::criterion_group!(benches, stream);
-criterion::criterion_main!(benches);
diff --git a/vendor/anstream/benches/strip.rs b/vendor/anstream/benches/strip.rs
deleted file mode 100644
index 9ed6178..0000000
--- a/vendor/anstream/benches/strip.rs
+++ /dev/null
@@ -1,102 +0,0 @@
-use criterion::{black_box, Criterion};
-
-#[derive(Default)]
-struct Strip(String);
-impl Strip {
- fn with_capacity(capacity: usize) -> Self {
- Self(String::with_capacity(capacity))
- }
-}
-impl anstyle_parse::Perform for Strip {
- fn print(&mut self, c: char) {
- self.0.push(c);
- }
-
- fn execute(&mut self, byte: u8) {
- if byte.is_ascii_whitespace() {
- self.0.push(byte as char);
- }
- }
-}
-
-fn strip(c: &mut Criterion) {
- for (name, content) in [
- ("demo.vte", &include_bytes!("../tests/demo.vte")[..]),
- ("rg_help.vte", &include_bytes!("../tests/rg_help.vte")[..]),
- ("rg_linus.vte", &include_bytes!("../tests/rg_linus.vte")[..]),
- (
- "state_changes",
- &b"\x1b]2;X\x1b\\ \x1b[0m \x1bP0@\x1b\\"[..],
- ),
- ] {
- // Make sure the comparison is fair
- if let Ok(content) = std::str::from_utf8(content) {
- let mut stripped = Strip::with_capacity(content.len());
- let mut parser = anstyle_parse::Parser::<anstyle_parse::DefaultCharAccumulator>::new();
- for byte in content.as_bytes() {
- parser.advance(&mut stripped, *byte);
- }
- assert_eq!(
- stripped.0,
- anstream::adapter::strip_str(content).to_string()
- );
- assert_eq!(
- stripped.0,
- String::from_utf8(anstream::adapter::strip_bytes(content.as_bytes()).into_vec())
- .unwrap()
- );
- }
-
- let mut group = c.benchmark_group(name);
- group.bench_function("advance_strip", |b| {
- b.iter(|| {
- let mut stripped = Strip::with_capacity(content.len());
- let mut parser =
- anstyle_parse::Parser::<anstyle_parse::DefaultCharAccumulator>::new();
-
- for byte in content {
- parser.advance(&mut stripped, *byte);
- }
-
- black_box(stripped.0)
- })
- });
- group.bench_function("strip_ansi_escapes", |b| {
- b.iter(|| {
- let stripped = strip_ansi_escapes::strip(content);
-
- black_box(stripped)
- })
- });
- if let Ok(content) = std::str::from_utf8(content) {
- group.bench_function("strip_str", |b| {
- b.iter(|| {
- let stripped = anstream::adapter::strip_str(content).to_string();
-
- black_box(stripped)
- })
- });
- group.bench_function("StripStr", |b| {
- b.iter(|| {
- let mut stripped = String::with_capacity(content.len());
- let mut state = anstream::adapter::StripStr::new();
- for printable in state.strip_next(content) {
- stripped.push_str(printable);
- }
-
- black_box(stripped)
- })
- });
- }
- group.bench_function("strip_bytes", |b| {
- b.iter(|| {
- let stripped = anstream::adapter::strip_bytes(content).into_vec();
-
- black_box(stripped)
- })
- });
- }
-}
-
-criterion::criterion_group!(benches, strip);
-criterion::criterion_main!(benches);
diff --git a/vendor/anstream/benches/wincon.rs b/vendor/anstream/benches/wincon.rs
deleted file mode 100644
index 54e1f80..0000000
--- a/vendor/anstream/benches/wincon.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-use criterion::{black_box, Criterion};
-
-fn wincon(c: &mut Criterion) {
- for (name, content) in [
- ("demo.vte", &include_bytes!("../tests/demo.vte")[..]),
- ("rg_help.vte", &include_bytes!("../tests/rg_help.vte")[..]),
- ("rg_linus.vte", &include_bytes!("../tests/rg_linus.vte")[..]),
- (
- "state_changes",
- &b"\x1b]2;X\x1b\\ \x1b[0m \x1bP0@\x1b\\"[..],
- ),
- ] {
- let mut group = c.benchmark_group(name);
- group.bench_function("wincon_bytes", |b| {
- b.iter(|| {
- let mut state = anstream::adapter::WinconBytes::new();
- let stripped = state.extract_next(content).collect::<Vec<_>>();
-
- black_box(stripped)
- })
- });
- }
-}
-
-criterion::criterion_group!(benches, wincon);
-criterion::criterion_main!(benches);
diff --git a/vendor/anstream/examples/dump-stream.rs b/vendor/anstream/examples/dump-stream.rs
deleted file mode 100644
index 86c768c..0000000
--- a/vendor/anstream/examples/dump-stream.rs
+++ /dev/null
@@ -1,128 +0,0 @@
-use std::io::Write;
-
-fn main() -> Result<(), lexopt::Error> {
- let args = Args::parse()?;
- let stdout = anstream::stdout();
- let mut stdout = stdout.lock();
-
- for fixed in 0..16 {
- let style = style(fixed, args.layer, args.effects);
- let _ = print_number(&mut stdout, fixed, style);
- if fixed == 7 || fixed == 15 {
- let _ = writeln!(&mut stdout);
- }
- }
-
- for r in 0..6 {
- let _ = writeln!(stdout);
- for g in 0..6 {
- for b in 0..6 {
- let fixed = r * 36 + g * 6 + b + 16;
- let style = style(fixed, args.layer, args.effects);
- let _ = print_number(&mut stdout, fixed, style);
- }
- let _ = writeln!(stdout);
- }
- }
-
- for c in 0..24 {
- if 0 == c % 8 {
- let _ = writeln!(stdout);
- }
- let fixed = 232 + c;
- let style = style(fixed, args.layer, args.effects);
- let _ = print_number(&mut stdout, fixed, style);
- }
-
- Ok(())
-}
-
-fn style(fixed: u8, layer: Layer, effects: anstyle::Effects) -> anstyle::Style {
- let color = anstyle::Ansi256Color(fixed).into();
- (match layer {
- Layer::Fg => anstyle::Style::new().fg_color(Some(color)),
- Layer::Bg => anstyle::Style::new().bg_color(Some(color)),
- Layer::Underline => anstyle::Style::new().underline_color(Some(color)),
- }) | effects
-}
-
-fn print_number(stdout: &mut impl Write, fixed: u8, style: anstyle::Style) -> std::io::Result<()> {
- write!(
- stdout,
- "{}{:>4}{}",
- style.render(),
- fixed,
- anstyle::Reset.render()
- )
-}
-
-#[derive(Default)]
-struct Args {
- effects: anstyle::Effects,
- layer: Layer,
-}
-
-#[derive(Copy, Clone, Default)]
-enum Layer {
- #[default]
- Fg,
- Bg,
- Underline,
-}
-
-impl Args {
- fn parse() -> Result<Self, lexopt::Error> {
- use lexopt::prelude::*;
-
- let mut res = Args::default();
-
- let mut args = lexopt::Parser::from_env();
- while let Some(arg) = args.next()? {
- match arg {
- Long("layer") => {
- res.layer = args.value()?.parse_with(|s| match s {
- "fg" => Ok(Layer::Fg),
- "bg" => Ok(Layer::Bg),
- "underline" => Ok(Layer::Underline),
- _ => Err("expected values fg, bg, underline"),
- })?;
- }
- Long("effect") => {
- const EFFECTS: [(&str, anstyle::Effects); 12] = [
- ("bold", anstyle::Effects::BOLD),
- ("dimmed", anstyle::Effects::DIMMED),
- ("italic", anstyle::Effects::ITALIC),
- ("underline", anstyle::Effects::UNDERLINE),
- ("double_underline", anstyle::Effects::DOUBLE_UNDERLINE),
- ("curly_underline", anstyle::Effects::CURLY_UNDERLINE),
- ("dotted_underline", anstyle::Effects::DOTTED_UNDERLINE),
- ("dashed_underline", anstyle::Effects::DASHED_UNDERLINE),
- ("blink", anstyle::Effects::BLINK),
- ("invert", anstyle::Effects::INVERT),
- ("hidden", anstyle::Effects::HIDDEN),
- ("strikethrough", anstyle::Effects::STRIKETHROUGH),
- ];
- let effect = args.value()?.parse_with(|s| {
- EFFECTS
- .into_iter()
- .find(|(name, _)| *name == s)
- .map(|(_, effect)| effect)
- .ok_or_else(|| {
- format!(
- "expected one of {}",
- EFFECTS
- .into_iter()
- .map(|(n, _)| n)
- .collect::<Vec<_>>()
- .join(", ")
- )
- })
- })?;
- res.effects = res.effects.insert(effect);
- }
- _ => return Err(arg.unexpected()),
- }
- }
- Ok(res)
- }
-}
diff --git a/vendor/anstream/examples/query-stream.rs b/vendor/anstream/examples/query-stream.rs
deleted file mode 100644
index fe0af95..0000000
--- a/vendor/anstream/examples/query-stream.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-fn main() {
- println!("stdout:");
- println!(
- " choice: {:?}",
- anstream::AutoStream::choice(&std::io::stdout())
- );
- println!(
- " choice: {:?}",
- anstream::AutoStream::auto(std::io::stdout()).current_choice()
- );
- println!("stderr:");
- println!(
- " choice: {:?}",
- anstream::AutoStream::choice(&std::io::stderr())
- );
- println!(
- " choice: {:?}",
- anstream::AutoStream::auto(std::io::stderr()).current_choice()
- );
-}
diff --git a/vendor/anstream/src/adapter/mod.rs b/vendor/anstream/src/adapter/mod.rs
deleted file mode 100644
index f266b68..0000000
--- a/vendor/anstream/src/adapter/mod.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-//! Gracefully degrade styled output
-
-mod strip;
-mod wincon;
-
-pub use strip::strip_bytes;
-pub use strip::strip_str;
-pub use strip::StripBytes;
-pub use strip::StripBytesIter;
-pub use strip::StripStr;
-pub use strip::StripStrIter;
-pub use strip::StrippedBytes;
-pub use strip::StrippedStr;
-pub use wincon::WinconBytes;
-pub use wincon::WinconBytesIter;
diff --git a/vendor/anstream/src/adapter/strip.rs b/vendor/anstream/src/adapter/strip.rs
deleted file mode 100644
index 5078c51..0000000
--- a/vendor/anstream/src/adapter/strip.rs
+++ /dev/null
@@ -1,513 +0,0 @@
-use anstyle_parse::state::state_change;
-use anstyle_parse::state::Action;
-use anstyle_parse::state::State;
-
-/// Strip ANSI escapes from a `&str`, returning the printable content
-///
-/// This can be used to take output from a program that includes escape sequences and write it
-/// somewhere that does not easily support them, such as a log file.
-///
-/// For non-contiguous data, see [`StripStr`].
-///
-/// # Example
-///
-/// ```rust
-/// use std::io::Write as _;
-///
-/// let styled_text = "\x1b[32mfoo\x1b[m bar";
-/// let plain_str = anstream::adapter::strip_str(&styled_text).to_string();
-/// assert_eq!(plain_str, "foo bar");
-/// ```
-#[inline]
-pub fn strip_str(data: &str) -> StrippedStr<'_> {
- StrippedStr::new(data)
-}
-
-/// See [`strip_str`]
-#[derive(Default, Clone, Debug, PartialEq, Eq)]
-pub struct StrippedStr<'s> {
- bytes: &'s [u8],
- state: State,
-}
-
-impl<'s> StrippedStr<'s> {
- #[inline]
- fn new(data: &'s str) -> Self {
- Self {
- bytes: data.as_bytes(),
- state: State::Ground,
- }
- }
-
- /// Create a [`String`] of the printable content
- #[inline]
- #[allow(clippy::inherent_to_string_shadow_display)] // Single-allocation implementation
- pub fn to_string(&self) -> String {
- use std::fmt::Write as _;
- let mut stripped = String::with_capacity(self.bytes.len());
- let _ = write!(&mut stripped, "{}", self);
- stripped
- }
-}
-
-impl<'s> std::fmt::Display for StrippedStr<'s> {
- /// **Note:** this does *not* exhaust the [`Iterator`]
- #[inline]
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- let iter = Self {
- bytes: self.bytes,
- state: self.state,
- };
- for printable in iter {
- printable.fmt(f)?;
- }
- Ok(())
- }
-}
-
-impl<'s> Iterator for StrippedStr<'s> {
- type Item = &'s str;
-
- #[inline]
- fn next(&mut self) -> Option<Self::Item> {
- next_str(&mut self.bytes, &mut self.state)
- }
-}
-
-/// Incrementally strip non-contiguous data
-#[derive(Default, Clone, Debug, PartialEq, Eq)]
-pub struct StripStr {
- state: State,
-}
-
-impl StripStr {
- /// Initial state
- pub fn new() -> Self {
- Default::default()
- }
-
- /// Strip the next segment of data
- pub fn strip_next<'s>(&'s mut self, data: &'s str) -> StripStrIter<'s> {
- StripStrIter {
- bytes: data.as_bytes(),
- state: &mut self.state,
- }
- }
-}
-
-/// See [`StripStr`]
-#[derive(Debug, PartialEq, Eq)]
-pub struct StripStrIter<'s> {
- bytes: &'s [u8],
- state: &'s mut State,
-}
-
-impl<'s> Iterator for StripStrIter<'s> {
- type Item = &'s str;
-
- #[inline]
- fn next(&mut self) -> Option<Self::Item> {
- next_str(&mut self.bytes, self.state)
- }
-}
-
-#[inline]
-fn next_str<'s>(bytes: &mut &'s [u8], state: &mut State) -> Option<&'s str> {
- let offset = bytes.iter().copied().position(|b| {
- let (next_state, action) = state_change(*state, b);
- if next_state != State::Anywhere {
- *state = next_state;
- }
- is_printable_str(action, b)
- });
- let (_, next) = bytes.split_at(offset.unwrap_or(bytes.len()));
- *bytes = next;
- *state = State::Ground;
-
- let offset = bytes.iter().copied().position(|b| {
- let (_next_state, action) = state_change(State::Ground, b);
- !is_printable_str(action, b)
- });
- let (printable, next) = bytes.split_at(offset.unwrap_or(bytes.len()));
- *bytes = next;
- if printable.is_empty() {
- None
- } else {
- let printable = unsafe {
- from_utf8_unchecked(
- printable,
- "`bytes` was validated as UTF-8, the parser preserves UTF-8 continuations",
- )
- };
- Some(printable)
- }
-}
-
-#[inline]
-unsafe fn from_utf8_unchecked<'b>(bytes: &'b [u8], safety_justification: &'static str) -> &'b str {
- if cfg!(debug_assertions) {
- // Catch problems more quickly when testing
- std::str::from_utf8(bytes).expect(safety_justification)
- } else {
- std::str::from_utf8_unchecked(bytes)
- }
-}
-
-#[inline]
-fn is_printable_str(action: Action, byte: u8) -> bool {
- // VT320 considered 0x7f to be `Print`able but we expect to be working in UTF-8 systems and not
- // ISO Latin-1, making it DEL and non-printable
- const DEL: u8 = 0x7f;
- (action == Action::Print && byte != DEL)
- || action == Action::BeginUtf8
- // since we know the input is valid UTF-8, the only thing we can do with
- // continuations is to print them
- || is_utf8_continuation(byte)
- || (action == Action::Execute && byte.is_ascii_whitespace())
-}
-
-#[inline]
-fn is_utf8_continuation(b: u8) -> bool {
- matches!(b, 0x80..=0xbf)
-}
-
-/// Strip ANSI escapes from bytes, returning the printable content
-///
-/// This can be used to take output from a program that includes escape sequences and write it
-/// somewhere that does not easily support them, such as a log file.
-///
-/// # Example
-///
-/// ```rust
-/// use std::io::Write as _;
-///
-/// let styled_text = "\x1b[32mfoo\x1b[m bar";
-/// let plain_str = anstream::adapter::strip_bytes(styled_text.as_bytes()).into_vec();
-/// assert_eq!(plain_str.as_slice(), &b"foo bar"[..]);
-/// ```
-#[inline]
-pub fn strip_bytes(data: &[u8]) -> StrippedBytes<'_> {
- StrippedBytes::new(data)
-}
-
-/// See [`strip_bytes`]
-#[derive(Default, Clone, Debug, PartialEq, Eq)]
-pub struct StrippedBytes<'s> {
- bytes: &'s [u8],
- state: State,
- utf8parser: Utf8Parser,
-}
-
-impl<'s> StrippedBytes<'s> {
- /// See [`strip_bytes`]
- #[inline]
- pub fn new(bytes: &'s [u8]) -> Self {
- Self {
- bytes,
- state: State::Ground,
- utf8parser: Default::default(),
- }
- }
-
- /// Strip the next slice of bytes
- ///
- /// Used when the content is in several non-contiguous slices
- ///
- /// # Panic
- ///
- /// May panic if it is not exhausted / empty
- #[inline]
- pub fn extend(&mut self, bytes: &'s [u8]) {
- debug_assert!(
- self.is_empty(),
- "current bytes must be processed to ensure we end at the right state"
- );
- self.bytes = bytes;
- }
-
- /// Report the bytes has been exhausted
- #[inline]
- pub fn is_empty(&self) -> bool {
- self.bytes.is_empty()
- }
-
- /// Create a [`Vec`] of the printable content
- #[inline]
- pub fn into_vec(self) -> Vec<u8> {
- let mut stripped = Vec::with_capacity(self.bytes.len());
- for printable in self {
- stripped.extend(printable);
- }
- stripped
- }
-}
-
-impl<'s> Iterator for StrippedBytes<'s> {
- type Item = &'s [u8];
-
- #[inline]
- fn next(&mut self) -> Option<Self::Item> {
- next_bytes(&mut self.bytes, &mut self.state, &mut self.utf8parser)
- }
-}
-
-/// Incrementally strip non-contiguous data
-#[derive(Default, Clone, Debug, PartialEq, Eq)]
-pub struct StripBytes {
- state: State,
- utf8parser: Utf8Parser,
-}
-
-impl StripBytes {
- /// Initial state
- pub fn new() -> Self {
- Default::default()
- }
-
- /// Strip the next segment of data
- pub fn strip_next<'s>(&'s mut self, bytes: &'s [u8]) -> StripBytesIter<'s> {
- StripBytesIter {
- bytes,
- state: &mut self.state,
- utf8parser: &mut self.utf8parser,
- }
- }
-}
-
-/// See [`StripBytes`]
-#[derive(Debug, PartialEq, Eq)]
-pub struct StripBytesIter<'s> {
- bytes: &'s [u8],
- state: &'s mut State,
- utf8parser: &'s mut Utf8Parser,
-}
-
-impl<'s> Iterator for StripBytesIter<'s> {
- type Item = &'s [u8];
-
- #[inline]
- fn next(&mut self) -> Option<Self::Item> {
- next_bytes(&mut self.bytes, self.state, self.utf8parser)
- }
-}
-
-#[inline]
-fn next_bytes<'s>(
- bytes: &mut &'s [u8],
- state: &mut State,
- utf8parser: &mut Utf8Parser,
-) -> Option<&'s [u8]> {
- let offset = bytes.iter().copied().position(|b| {
- if *state == State::Utf8 {
- true
- } else {
- let (next_state, action) = state_change(*state, b);
- if next_state != State::Anywhere {
- *state = next_state;
- }
- is_printable_bytes(action, b)
- }
- });
- let (_, next) = bytes.split_at(offset.unwrap_or(bytes.len()));
- *bytes = next;
-
- let offset = bytes.iter().copied().position(|b| {
- if *state == State::Utf8 {
- if utf8parser.add(b) {
- *state = State::Ground;
- }
- false
- } else {
- let (next_state, action) = state_change(State::Ground, b);
- if next_state != State::Anywhere {
- *state = next_state;
- }
- if *state == State::Utf8 {
- utf8parser.add(b);
- false
- } else {
- !is_printable_bytes(action, b)
- }
- }
- });
- let (printable, next) = bytes.split_at(offset.unwrap_or(bytes.len()));
- *bytes = next;
- if printable.is_empty() {
- None
- } else {
- Some(printable)
- }
-}
-
-#[derive(Default, Clone, Debug, PartialEq, Eq)]
-pub struct Utf8Parser {
- utf8_parser: utf8parse::Parser,
-}
-
-impl Utf8Parser {
- fn add(&mut self, byte: u8) -> bool {
- let mut b = false;
- let mut receiver = VtUtf8Receiver(&mut b);
- self.utf8_parser.advance(&mut receiver, byte);
- b
- }
-}
-
-struct VtUtf8Receiver<'a>(&'a mut bool);
-
-impl<'a> utf8parse::Receiver for VtUtf8Receiver<'a> {
- fn codepoint(&mut self, _: char) {
- *self.0 = true;
- }
-
- fn invalid_sequence(&mut self) {
- *self.0 = true;
- }
-}
-
-#[inline]
-fn is_printable_bytes(action: Action, byte: u8) -> bool {
- // VT320 considered 0x7f to be `Print`able but we expect to be working in UTF-8 systems and not
- // ISO Latin-1, making it DEL and non-printable
- const DEL: u8 = 0x7f;
-
- // Continuations aren't included as they may also be control codes, requiring more context
- (action == Action::Print && byte != DEL)
- || action == Action::BeginUtf8
- || (action == Action::Execute && byte.is_ascii_whitespace())
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
- use proptest::prelude::*;
-
- /// Model based off full parser
- fn parser_strip(bytes: &[u8]) -> String {
- #[derive(Default)]
- struct Strip(String);
- impl Strip {
- fn with_capacity(capacity: usize) -> Self {
- Self(String::with_capacity(capacity))
- }
- }
- impl anstyle_parse::Perform for Strip {
- fn print(&mut self, c: char) {
- self.0.push(c);
- }
-
- fn execute(&mut self, byte: u8) {
- if byte.is_ascii_whitespace() {
- self.0.push(byte as char);
- }
- }
- }
-
- let mut stripped = Strip::with_capacity(bytes.len());
- let mut parser = anstyle_parse::Parser::<anstyle_parse::DefaultCharAccumulator>::new();
- for byte in bytes {
- parser.advance(&mut stripped, *byte);
- }
- stripped.0
- }
-
- /// Model verifying incremental parsing
- fn strip_char(mut s: &str) -> String {
- let mut result = String::new();
- let mut state = StripStr::new();
- while !s.is_empty() {
- let mut indices = s.char_indices();
- indices.next(); // current
- let offset = indices.next().map(|(i, _)| i).unwrap_or_else(|| s.len());
- let (current, remainder) = s.split_at(offset);
- for printable in state.strip_next(current) {
- result.push_str(printable);
- }
- s = remainder;
- }
- result
- }
-
- /// Model verifying incremental parsing
- fn strip_byte(s: &[u8]) -> Vec<u8> {
- let mut result = Vec::new();
- let mut state = StripBytes::default();
- for start in 0..s.len() {
- let current = &s[start..=start];
- for printable in state.strip_next(current) {
- result.extend(printable);
- }
- }
- result
- }
-
- #[test]
- fn test_strip_bytes_multibyte() {
- let bytes = [240, 145, 141, 139];
- let expected = parser_strip(&bytes);
- let actual = String::from_utf8(strip_bytes(&bytes).into_vec()).unwrap();
- assert_eq!(expected, actual);
- }
-
- #[test]
- fn test_strip_byte_multibyte() {
- let bytes = [240, 145, 141, 139];
- let expected = parser_strip(&bytes);
- let actual = String::from_utf8(strip_byte(&bytes).to_vec()).unwrap();
- assert_eq!(expected, actual);
- }
-
- #[test]
- fn test_strip_str_del() {
- let input = std::str::from_utf8(&[0x7f]).unwrap();
- let expected = "";
- let actual = strip_str(input).to_string();
- assert_eq!(expected, actual);
- }
-
- #[test]
- fn test_strip_byte_del() {
- let bytes = [0x7f];
- let expected = "";
- let actual = String::from_utf8(strip_byte(&bytes).to_vec()).unwrap();
- assert_eq!(expected, actual);
- }
-
- proptest! {
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn strip_str_no_escapes(s in "\\PC*") {
- let expected = parser_strip(s.as_bytes());
- let actual = strip_str(&s).to_string();
- assert_eq!(expected, actual);
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn strip_char_no_escapes(s in "\\PC*") {
- let expected = parser_strip(s.as_bytes());
- let actual = strip_char(&s);
- assert_eq!(expected, actual);
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn strip_bytes_no_escapes(s in "\\PC*") {
- dbg!(&s);
- dbg!(s.as_bytes());
- let expected = parser_strip(s.as_bytes());
- let actual = String::from_utf8(strip_bytes(s.as_bytes()).into_vec()).unwrap();
- assert_eq!(expected, actual);
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn strip_byte_no_escapes(s in "\\PC*") {
- dbg!(&s);
- dbg!(s.as_bytes());
- let expected = parser_strip(s.as_bytes());
- let actual = String::from_utf8(strip_byte(s.as_bytes()).to_vec()).unwrap();
- assert_eq!(expected, actual);
- }
- }
-}
diff --git a/vendor/anstream/src/adapter/wincon.rs b/vendor/anstream/src/adapter/wincon.rs
deleted file mode 100644
index de3da65..0000000
--- a/vendor/anstream/src/adapter/wincon.rs
+++ /dev/null
@@ -1,320 +0,0 @@
-/// Incrementally convert to wincon calls for non-contiguous data
-#[derive(Default, Clone, Debug, PartialEq, Eq)]
-pub struct WinconBytes {
- parser: anstyle_parse::Parser,
- capture: WinconCapture,
-}
-
-impl WinconBytes {
- /// Initial state
- pub fn new() -> Self {
- Default::default()
- }
-
- /// Strip the next segment of data
- pub fn extract_next<'s>(&'s mut self, bytes: &'s [u8]) -> WinconBytesIter<'s> {
- self.capture.reset();
- self.capture.printable.reserve(bytes.len());
- WinconBytesIter {
- bytes,
- parser: &mut self.parser,
- capture: &mut self.capture,
- }
- }
-}
-
-/// See [`WinconBytes`]
-#[derive(Debug, PartialEq, Eq)]
-pub struct WinconBytesIter<'s> {
- bytes: &'s [u8],
- parser: &'s mut anstyle_parse::Parser,
- capture: &'s mut WinconCapture,
-}
-
-impl<'s> Iterator for WinconBytesIter<'s> {
- type Item = (anstyle::Style, String);
-
- #[inline]
- fn next(&mut self) -> Option<Self::Item> {
- next_bytes(&mut self.bytes, self.parser, self.capture)
- }
-}
-
-#[inline]
-fn next_bytes(
- bytes: &mut &[u8],
- parser: &mut anstyle_parse::Parser,
- capture: &mut WinconCapture,
-) -> Option<(anstyle::Style, String)> {
- capture.reset();
- while capture.ready.is_none() {
- let byte = if let Some((byte, remainder)) = (*bytes).split_first() {
- *bytes = remainder;
- *byte
- } else {
- break;
- };
- parser.advance(capture, byte);
- }
- if capture.printable.is_empty() {
- return None;
- }
-
- let style = capture.ready.unwrap_or(capture.style);
- Some((style, std::mem::take(&mut capture.printable)))
-}
-
-#[derive(Default, Clone, Debug, PartialEq, Eq)]
-struct WinconCapture {
- style: anstyle::Style,
- printable: String,
- ready: Option<anstyle::Style>,
-}
-
-impl WinconCapture {
- fn reset(&mut self) {
- self.ready = None;
- }
-}
-
-impl anstyle_parse::Perform for WinconCapture {
- /// Draw a character to the screen and update states.
- fn print(&mut self, c: char) {
- self.printable.push(c);
- }
-
- /// Execute a C0 or C1 control function.
- fn execute(&mut self, byte: u8) {
- if byte.is_ascii_whitespace() {
- self.printable.push(byte as char);
- }
- }
-
- fn csi_dispatch(
- &mut self,
- params: &anstyle_parse::Params,
- _intermediates: &[u8],
- ignore: bool,
- action: u8,
- ) {
- if ignore {
- return;
- }
- if action != b'm' {
- return;
- }
-
- let mut style = self.style;
- // param/value differences are dependent on the escape code
- let mut state = State::Normal;
- let mut r = None;
- let mut g = None;
- let mut is_bg = false;
- for param in params {
- for value in param {
- match (state, *value) {
- (State::Normal, 0) => {
- style = anstyle::Style::default();
- break;
- }
- (State::Normal, 1) => {
- style = style.bold();
- break;
- }
- (State::Normal, 4) => {
- style = style.underline();
- break;
- }
- (State::Normal, 30..=37) => {
- let color = to_ansi_color(value - 30).unwrap();
- style = style.fg_color(Some(color.into()));
- break;
- }
- (State::Normal, 38) => {
- is_bg = false;
- state = State::PrepareCustomColor;
- }
- (State::Normal, 39) => {
- style = style.fg_color(None);
- break;
- }
- (State::Normal, 40..=47) => {
- let color = to_ansi_color(value - 40).unwrap();
- style = style.bg_color(Some(color.into()));
- break;
- }
- (State::Normal, 48) => {
- is_bg = true;
- state = State::PrepareCustomColor;
- }
- (State::Normal, 49) => {
- style = style.bg_color(None);
- break;
- }
- (State::Normal, 90..=97) => {
- let color = to_ansi_color(value - 90).unwrap().bright(true);
- style = style.fg_color(Some(color.into()));
- break;
- }
- (State::Normal, 100..=107) => {
- let color = to_ansi_color(value - 100).unwrap().bright(true);
- style = style.bg_color(Some(color.into()));
- break;
- }
- (State::PrepareCustomColor, 5) => {
- state = State::Ansi256;
- }
- (State::PrepareCustomColor, 2) => {
- state = State::Rgb;
- r = None;
- g = None;
- }
- (State::Ansi256, n) => {
- let color = anstyle::Ansi256Color(n as u8);
- if is_bg {
- style = style.bg_color(Some(color.into()));
- } else {
- style = style.fg_color(Some(color.into()));
- }
- break;
- }
- (State::Rgb, b) => match (r, g) {
- (None, _) => {
- r = Some(b);
- }
- (Some(_), None) => {
- g = Some(b);
- }
- (Some(r), Some(g)) => {
- let color = anstyle::RgbColor(r as u8, g as u8, b as u8);
- if is_bg {
- style = style.bg_color(Some(color.into()));
- } else {
- style = style.fg_color(Some(color.into()));
- }
- break;
- }
- },
- _ => {
- break;
- }
- }
- }
- }
-
- if style != self.style && !self.printable.is_empty() {
- self.ready = Some(self.style);
- }
- self.style = style;
- }
-}
-
-#[derive(Copy, Clone, PartialEq, Eq, Debug)]
-enum State {
- Normal,
- PrepareCustomColor,
- Ansi256,
- Rgb,
-}
-
-fn to_ansi_color(digit: u16) -> Option<anstyle::AnsiColor> {
- match digit {
- 0 => Some(anstyle::AnsiColor::Black),
- 1 => Some(anstyle::AnsiColor::Red),
- 2 => Some(anstyle::AnsiColor::Green),
- 3 => Some(anstyle::AnsiColor::Yellow),
- 4 => Some(anstyle::AnsiColor::Blue),
- 5 => Some(anstyle::AnsiColor::Magenta),
- 6 => Some(anstyle::AnsiColor::Cyan),
- 7 => Some(anstyle::AnsiColor::White),
- _ => None,
- }
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
- use owo_colors::OwoColorize as _;
- use proptest::prelude::*;
-
- #[track_caller]
- fn verify(input: &str, expected: Vec<(anstyle::Style, &str)>) {
- let expected = expected
- .into_iter()
- .map(|(style, value)| (style, value.to_owned()))
- .collect::<Vec<_>>();
- let mut state = WinconBytes::new();
- let actual = state.extract_next(input.as_bytes()).collect::<Vec<_>>();
- assert_eq!(expected, actual, "{input:?}");
- }
-
- #[test]
- fn start() {
- let input = format!("{} world!", "Hello".green().on_red());
- let expected = vec![
- (
- anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red),
- "Hello",
- ),
- (anstyle::Style::default(), " world!"),
- ];
- verify(&input, expected);
- }
-
- #[test]
- fn middle() {
- let input = format!("Hello {}!", "world".green().on_red());
- let expected = vec![
- (anstyle::Style::default(), "Hello "),
- (
- anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red),
- "world",
- ),
- (anstyle::Style::default(), "!"),
- ];
- verify(&input, expected);
- }
-
- #[test]
- fn end() {
- let input = format!("Hello {}", "world!".green().on_red());
- let expected = vec![
- (anstyle::Style::default(), "Hello "),
- (
- anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red),
- "world!",
- ),
- ];
- verify(&input, expected);
- }
-
- #[test]
- fn ansi256_colors() {
- // termcolor only supports "brights" via these
- let input = format!(
- "Hello {}!",
- "world".color(owo_colors::XtermColors::UserBrightYellow)
- );
- let expected = vec![
- (anstyle::Style::default(), "Hello "),
- (anstyle::Ansi256Color(11).on_default(), "world"),
- (anstyle::Style::default(), "!"),
- ];
- verify(&input, expected);
- }
-
- proptest! {
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn wincon_no_escapes(s in "\\PC*") {
- let expected = if s.is_empty() {
- vec![]
- } else {
- vec![(anstyle::Style::default(), s.clone())]
- };
- let mut state = WinconBytes::new();
- let actual = state.extract_next(s.as_bytes()).collect::<Vec<_>>();
- assert_eq!(expected, actual);
- }
- }
-}
diff --git a/vendor/anstream/src/auto.rs b/vendor/anstream/src/auto.rs
deleted file mode 100644
index 7aaac6a..0000000
--- a/vendor/anstream/src/auto.rs
+++ /dev/null
@@ -1,263 +0,0 @@
-use crate::stream::AsLockedWrite;
-use crate::stream::RawStream;
-#[cfg(feature = "auto")]
-use crate::ColorChoice;
-use crate::StripStream;
-#[cfg(all(windows, feature = "wincon"))]
-use crate::WinconStream;
-
-/// [`std::io::Write`] that adapts ANSI escape codes to the underlying `Write`s capabilities
-#[derive(Debug)]
-pub struct AutoStream<S: RawStream> {
- inner: StreamInner<S>,
-}
-
-#[derive(Debug)]
-enum StreamInner<S: RawStream> {
- PassThrough(S),
- Strip(StripStream<S>),
- #[cfg(all(windows, feature = "wincon"))]
- Wincon(WinconStream<S>),
-}
-
-impl<S> AutoStream<S>
-where
- S: RawStream,
-{
- /// Runtime control over styling behavior
- #[cfg(feature = "auto")]
- #[inline]
- pub fn new(raw: S, choice: ColorChoice) -> Self {
- match choice {
- ColorChoice::Auto => Self::auto(raw),
- ColorChoice::AlwaysAnsi => Self::always_ansi(raw),
- ColorChoice::Always => Self::always(raw),
- ColorChoice::Never => Self::never(raw),
- }
- }
-
- /// Auto-adapt for the stream's capabilities
- #[cfg(feature = "auto")]
- #[inline]
- pub fn auto(raw: S) -> Self {
- let choice = Self::choice(&raw);
- debug_assert_ne!(choice, ColorChoice::Auto);
- Self::new(raw, choice)
- }
-
- /// Report the desired choice for the given stream
- #[cfg(feature = "auto")]
- pub fn choice(raw: &S) -> ColorChoice {
- choice(raw)
- }
-
- /// Force ANSI escape codes to be passed through as-is, no matter what the inner `Write`
- /// supports.
- #[inline]
- pub fn always_ansi(raw: S) -> Self {
- #[cfg(feature = "auto")]
- {
- if raw.is_terminal() {
- let _ = anstyle_query::windows::enable_ansi_colors();
- }
- }
- Self::always_ansi_(raw)
- }
-
- #[inline]
- fn always_ansi_(raw: S) -> Self {
- let inner = StreamInner::PassThrough(raw);
- AutoStream { inner }
- }
-
- /// Force color, no matter what the inner `Write` supports.
- #[inline]
- pub fn always(raw: S) -> Self {
- if cfg!(windows) {
- #[cfg(feature = "auto")]
- let use_wincon = raw.is_terminal()
- && !anstyle_query::windows::enable_ansi_colors().unwrap_or(true)
- && !anstyle_query::term_supports_ansi_color();
- #[cfg(not(feature = "auto"))]
- let use_wincon = true;
- if use_wincon {
- Self::wincon(raw).unwrap_or_else(|raw| Self::always_ansi_(raw))
- } else {
- Self::always_ansi_(raw)
- }
- } else {
- Self::always_ansi(raw)
- }
- }
-
- /// Only pass printable data to the inner `Write`.
- #[inline]
- pub fn never(raw: S) -> Self {
- let inner = StreamInner::Strip(StripStream::new(raw));
- AutoStream { inner }
- }
-
- #[inline]
- fn wincon(raw: S) -> Result<Self, S> {
- #[cfg(all(windows, feature = "wincon"))]
- {
- Ok(Self {
- inner: StreamInner::Wincon(WinconStream::new(raw)),
- })
- }
- #[cfg(not(all(windows, feature = "wincon")))]
- {
- Err(raw)
- }
- }
-
- /// Get the wrapped [`RawStream`]
- #[inline]
- pub fn into_inner(self) -> S {
- match self.inner {
- StreamInner::PassThrough(w) => w,
- StreamInner::Strip(w) => w.into_inner(),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => w.into_inner(),
- }
- }
-
- #[inline]
- pub fn is_terminal(&self) -> bool {
- match &self.inner {
- StreamInner::PassThrough(w) => w.is_terminal(),
- StreamInner::Strip(w) => w.is_terminal(),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(_) => true, // its only ever a terminal
- }
- }
-
- /// Prefer [`AutoStream::choice`]
- ///
- /// This doesn't report what is requested but what is currently active.
- #[inline]
- #[cfg(feature = "auto")]
- pub fn current_choice(&self) -> ColorChoice {
- match &self.inner {
- StreamInner::PassThrough(_) => ColorChoice::AlwaysAnsi,
- StreamInner::Strip(_) => ColorChoice::Never,
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(_) => ColorChoice::Always,
- }
- }
-}
-
-#[cfg(feature = "auto")]
-fn choice(raw: &dyn RawStream) -> ColorChoice {
- let choice = ColorChoice::global();
- match choice {
- ColorChoice::Auto => {
- let clicolor = anstyle_query::clicolor();
- let clicolor_enabled = clicolor.unwrap_or(false);
- let clicolor_disabled = !clicolor.unwrap_or(true);
- if raw.is_terminal()
- && !anstyle_query::no_color()
- && !clicolor_disabled
- && (anstyle_query::term_supports_color()
- || clicolor_enabled
- || anstyle_query::is_ci())
- || anstyle_query::clicolor_force()
- {
- ColorChoice::Always
- } else {
- ColorChoice::Never
- }
- }
- ColorChoice::AlwaysAnsi | ColorChoice::Always | ColorChoice::Never => choice,
- }
-}
-
-impl AutoStream<std::io::Stdout> {
- /// Get exclusive access to the `AutoStream`
- ///
- /// Why?
- /// - Faster performance when writing in a loop
- /// - Avoid other threads interleaving output with the current thread
- #[inline]
- pub fn lock(self) -> AutoStream<std::io::StdoutLock<'static>> {
- let inner = match self.inner {
- StreamInner::PassThrough(w) => StreamInner::PassThrough(w.lock()),
- StreamInner::Strip(w) => StreamInner::Strip(w.lock()),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => StreamInner::Wincon(w.lock()),
- };
- AutoStream { inner }
- }
-}
-
-impl AutoStream<std::io::Stderr> {
- /// Get exclusive access to the `AutoStream`
- ///
- /// Why?
- /// - Faster performance when writing in a loop
- /// - Avoid other threads interleaving output with the current thread
- #[inline]
- pub fn lock(self) -> AutoStream<std::io::StderrLock<'static>> {
- let inner = match self.inner {
- StreamInner::PassThrough(w) => StreamInner::PassThrough(w.lock()),
- StreamInner::Strip(w) => StreamInner::Strip(w.lock()),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => StreamInner::Wincon(w.lock()),
- };
- AutoStream { inner }
- }
-}
-
-impl<S> std::io::Write for AutoStream<S>
-where
- S: RawStream + AsLockedWrite,
-{
- // Must forward all calls to ensure locking happens appropriately
- #[inline]
- fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
- match &mut self.inner {
- StreamInner::PassThrough(w) => w.as_locked_write().write(buf),
- StreamInner::Strip(w) => w.write(buf),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => w.write(buf),
- }
- }
- #[inline]
- fn write_vectored(&mut self, bufs: &[std::io::IoSlice<'_>]) -> std::io::Result<usize> {
- match &mut self.inner {
- StreamInner::PassThrough(w) => w.as_locked_write().write_vectored(bufs),
- StreamInner::Strip(w) => w.write_vectored(bufs),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => w.write_vectored(bufs),
- }
- }
- // is_write_vectored: nightly only
- #[inline]
- fn flush(&mut self) -> std::io::Result<()> {
- match &mut self.inner {
- StreamInner::PassThrough(w) => w.as_locked_write().flush(),
- StreamInner::Strip(w) => w.flush(),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => w.flush(),
- }
- }
- #[inline]
- fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> {
- match &mut self.inner {
- StreamInner::PassThrough(w) => w.as_locked_write().write_all(buf),
- StreamInner::Strip(w) => w.write_all(buf),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => w.write_all(buf),
- }
- }
- // write_all_vectored: nightly only
- #[inline]
- fn write_fmt(&mut self, args: std::fmt::Arguments<'_>) -> std::io::Result<()> {
- match &mut self.inner {
- StreamInner::PassThrough(w) => w.as_locked_write().write_fmt(args),
- StreamInner::Strip(w) => w.write_fmt(args),
- #[cfg(all(windows, feature = "wincon"))]
- StreamInner::Wincon(w) => w.write_fmt(args),
- }
- }
-}
diff --git a/vendor/anstream/src/buffer.rs b/vendor/anstream/src/buffer.rs
deleted file mode 100644
index 9846bb7..0000000
--- a/vendor/anstream/src/buffer.rs
+++ /dev/null
@@ -1,68 +0,0 @@
-#![allow(deprecated)]
-
-/// In-memory [`RawStream`][crate::stream::RawStream]
-#[derive(Clone, Default, Debug, PartialEq, Eq)]
-#[deprecated(since = "0.6.2", note = "Use Vec")]
-#[doc(hidden)]
-pub struct Buffer(Vec<u8>);
-
-impl Buffer {
- #[inline]
- pub fn new() -> Self {
- Default::default()
- }
-
- #[inline]
- pub fn with_capacity(capacity: usize) -> Self {
- Self(Vec::with_capacity(capacity))
- }
-
- #[inline]
- pub fn as_bytes(&self) -> &[u8] {
- &self.0
- }
-}
-
-impl AsRef<[u8]> for Buffer {
- #[inline]
- fn as_ref(&self) -> &[u8] {
- self.as_bytes()
- }
-}
-
-impl std::io::Write for Buffer {
- #[inline]
- fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
- self.0.extend(buf);
- Ok(buf.len())
- }
-
- #[inline]
- fn flush(&mut self) -> std::io::Result<()> {
- Ok(())
- }
-}
-
-#[cfg(all(windows, feature = "wincon"))]
-impl anstyle_wincon::WinconStream for Buffer {
- fn write_colored(
- &mut self,
- fg: Option<anstyle::AnsiColor>,
- bg: Option<anstyle::AnsiColor>,
- data: &[u8],
- ) -> std::io::Result<usize> {
- self.0.write_colored(fg, bg, data)
- }
-}
-
-#[cfg(all(windows, feature = "wincon"))]
-impl anstyle_wincon::WinconStream for &'_ mut Buffer {
- fn write_colored(
- &mut self,
- fg: Option<anstyle::AnsiColor>,
- bg: Option<anstyle::AnsiColor>,
- data: &[u8],
- ) -> std::io::Result<usize> {
- (**self).write_colored(fg, bg, data)
- }
-}
diff --git a/vendor/anstream/src/fmt.rs b/vendor/anstream/src/fmt.rs
deleted file mode 100644
index e673c26..0000000
--- a/vendor/anstream/src/fmt.rs
+++ /dev/null
@@ -1,54 +0,0 @@
-/// A shim which allows a [`std::io::Write`] to be implemented in terms of a [`std::fmt::Write`]
-///
-/// This saves off I/O errors. instead of discarding them
-pub(crate) struct Adapter<W>
-where
- W: FnMut(&[u8]) -> std::io::Result<()>,
-{
- writer: W,
- error: std::io::Result<()>,
-}
-
-impl<W> Adapter<W>
-where
- W: FnMut(&[u8]) -> std::io::Result<()>,
-{
- pub(crate) fn new(writer: W) -> Self {
- Adapter {
- writer,
- error: Ok(()),
- }
- }
-
- pub(crate) fn write_fmt(mut self, fmt: std::fmt::Arguments<'_>) -> std::io::Result<()> {
- match std::fmt::write(&mut self, fmt) {
- Ok(()) => Ok(()),
- Err(..) => {
- // check if the error came from the underlying `Write` or not
- if self.error.is_err() {
- self.error
- } else {
- Err(std::io::Error::new(
- std::io::ErrorKind::Other,
- "formatter error",
- ))
- }
- }
- }
- }
-}
-
-impl<W> std::fmt::Write for Adapter<W>
-where
- W: FnMut(&[u8]) -> std::io::Result<()>,
-{
- fn write_str(&mut self, s: &str) -> std::fmt::Result {
- match (self.writer)(s.as_bytes()) {
- Ok(()) => Ok(()),
- Err(e) => {
- self.error = Err(e);
- Err(std::fmt::Error)
- }
- }
- }
-}
diff --git a/vendor/anstream/src/lib.rs b/vendor/anstream/src/lib.rs
deleted file mode 100644
index 9721139..0000000
--- a/vendor/anstream/src/lib.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-//! **Auto-adapting [`stdout`] / [`stderr`] streams**
-//!
-//! *A portmanteau of "ansi stream"*
-//!
-//! [`AutoStream`] always accepts [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code),
-//! adapting to the user's terminal's capabilities.
-//!
-//! Benefits
-//! - Allows the caller to not be concerned with the terminal's capabilities
-//! - Semver safe way of passing styled text between crates as ANSI escape codes offer more
-//! compatibility than most crate APIs.
-//!
-//! Available styling crates:
-//! - [anstyle](https://docs.rs/anstyle) for minimal runtime styling, designed to go in public APIs
-//! (once it hits 1.0)
-//! - [owo-colors](https://docs.rs/owo-colors) for feature-rich runtime styling
-//! - [color-print](https://docs.rs/color-print) for feature-rich compile-time styling
-//!
-//! # Example
-//!
-//! ```
-//! # #[cfg(feature = "auto")] {
-//! use anstream::println;
-//! use owo_colors::OwoColorize as _;
-//!
-//! // Foreground colors
-//! println!("My number is {:#x}!", 10.green());
-//! // Background colors
-//! println!("My number is not {}!", 4.on_red());
-//! # }
-//! ```
-//!
-//! And this will correctly handle piping to a file, etc
-
-#![cfg_attr(docsrs, feature(doc_auto_cfg))]
-
-pub mod adapter;
-pub mod stream;
-
-mod buffer;
-#[macro_use]
-mod macros;
-mod auto;
-mod fmt;
-mod strip;
-#[cfg(all(windows, feature = "wincon"))]
-mod wincon;
-
-pub use auto::AutoStream;
-pub use strip::StripStream;
-#[cfg(all(windows, feature = "wincon"))]
-pub use wincon::WinconStream;
-
-#[allow(deprecated)]
-pub use buffer::Buffer;
-
-/// Create an ANSI escape code compatible stdout
-///
-/// **Note:** Call [`AutoStream::lock`] in loops to avoid the performance hit of acquiring/releasing
-/// from the implicit locking in each [`std::io::Write`] call
-#[cfg(feature = "auto")]
-pub fn stdout() -> AutoStream<std::io::Stdout> {
- let stdout = std::io::stdout();
- AutoStream::auto(stdout)
-}
-
-/// Create an ANSI escape code compatible stderr
-///
-/// **Note:** Call [`AutoStream::lock`] in loops to avoid the performance hit of acquiring/releasing
-/// from the implicit locking in each [`std::io::Write`] call
-#[cfg(feature = "auto")]
-pub fn stderr() -> AutoStream<std::io::Stderr> {
- let stderr = std::io::stderr();
- AutoStream::auto(stderr)
-}
-
-/// Selection for overriding color output
-#[cfg(feature = "auto")]
-pub use colorchoice::ColorChoice;
diff --git a/vendor/anstream/src/macros.rs b/vendor/anstream/src/macros.rs
deleted file mode 100644
index bd1accb..0000000
--- a/vendor/anstream/src/macros.rs
+++ /dev/null
@@ -1,389 +0,0 @@
-/// Prints to [`stdout`][crate::stdout].
-///
-/// Equivalent to the [`println!`] macro except that a newline is not printed at
-/// the end of the message.
-///
-/// Note that stdout is frequently line-buffered by default so it may be
-/// necessary to use [`std::io::Write::flush()`] to ensure the output is emitted
-/// immediately.
-///
-/// **NOTE:** The `print!` macro will lock the standard output on each call. If you call
-/// `print!` within a hot loop, this behavior may be the bottleneck of the loop.
-/// To avoid this, lock stdout with [`AutoStream::lock`][crate::AutoStream::lock]:
-/// ```
-/// # #[cfg(feature = "auto")] {
-/// use std::io::Write as _;
-///
-/// let mut lock = anstream::stdout().lock();
-/// write!(lock, "hello world").unwrap();
-/// # }
-/// ```
-///
-/// Use `print!` only for the primary output of your program. Use
-/// [`eprint!`] instead to print error and progress messages.
-///
-/// **NOTE:** Not all `print!` calls will be captured in tests like [`std::print!`]
-/// - Capturing will automatically be activated in test binaries
-/// - Otherwise, only when the `test` feature is enabled
-///
-/// # Panics
-///
-/// Panics if writing to `stdout` fails for any reason **except** broken pipe.
-///
-/// Writing to non-blocking stdout can cause an error, which will lead
-/// this macro to panic.
-///
-/// # Examples
-///
-/// ```
-/// # #[cfg(feature = "auto")] {
-/// use std::io::Write as _;
-/// use anstream::print;
-/// use anstream::stdout;
-///
-/// print!("this ");
-/// print!("will ");
-/// print!("be ");
-/// print!("on ");
-/// print!("the ");
-/// print!("same ");
-/// print!("line ");
-///
-/// stdout().flush().unwrap();
-///
-/// print!("this string has a newline, why not choose println! instead?\n");
-///
-/// stdout().flush().unwrap();
-/// # }
-/// ```
-#[cfg(feature = "auto")]
-#[macro_export]
-macro_rules! print {
- ($($arg:tt)*) => {{
- if cfg!(any(feature = "test", test)) {
- use std::io::Write as _;
-
- let stdio = std::io::stdout();
- let choice = $crate::AutoStream::choice(&stdio);
- let buffer = Vec::new();
- let mut stream = $crate::AutoStream::new(buffer, choice);
- // Ignore errors rather than panic
- let _ = ::std::write!(&mut stream, $($arg)*);
- let buffer = stream.into_inner();
- // Should be UTF-8 but not wanting to panic
- let buffer = String::from_utf8_lossy(&buffer);
- ::std::print!("{}", buffer)
- } else {
- use std::io::Write as _;
-
- let mut stream = $crate::stdout();
- match ::std::write!(&mut stream, $($arg)*) {
- Err(e) if e.kind() != ::std::io::ErrorKind::BrokenPipe => {
- ::std::panic!("failed printing to stdout: {e}");
- }
- Err(_) | Ok(_) => {}
- }
- }
- }};
-}
-
-/// Prints to [`stdout`][crate::stdout], with a newline.
-///
-/// On all platforms, the newline is the LINE FEED character (`\n`/`U+000A`) alone
-/// (no additional CARRIAGE RETURN (`\r`/`U+000D`)).
-///
-/// This macro uses the same syntax as [`format!`], but writes to the standard output instead.
-/// See [`std::fmt`] for more information.
-///
-/// **NOTE:** The `println!` macro will lock the standard output on each call. If you call
-/// `println!` within a hot loop, this behavior may be the bottleneck of the loop.
-/// To avoid this, lock stdout with [`AutoStream::lock`][crate::AutoStream::lock]:
-/// ```
-/// # #[cfg(feature = "auto")] {
-/// use std::io::Write as _;
-///
-/// let mut lock = anstream::stdout().lock();
-/// writeln!(lock, "hello world").unwrap();
-/// # }
-/// ```
-///
-/// Use `println!` only for the primary output of your program. Use
-/// [`eprintln!`] instead to print error and progress messages.
-///
-/// **NOTE:** Not all `println!` calls will be captured in tests like [`std::println!`]
-/// - Capturing will automatically be activated in test binaries
-/// - Otherwise, only when the `test` feature is enabled
-///
-/// # Panics
-///
-/// Panics if writing to `stdout` fails for any reason **except** broken pipe.
-///
-/// Writing to non-blocking stdout can cause an error, which will lead
-/// this macro to panic.
-///
-/// # Examples
-///
-/// ```
-/// # #[cfg(feature = "auto")] {
-/// use anstream::println;
-///
-/// println!(); // prints just a newline
-/// println!("hello there!");
-/// println!("format {} arguments", "some");
-/// let local_variable = "some";
-/// println!("format {local_variable} arguments");
-/// # }
-/// ```
-#[cfg(feature = "auto")]
-#[macro_export]
-macro_rules! println {
- () => {
- $crate::print!("\n")
- };
- ($($arg:tt)*) => {{
- if cfg!(any(feature = "test", test)) {
- use std::io::Write as _;
-
- let stdio = std::io::stdout();
- let choice = $crate::AutoStream::choice(&stdio);
- let buffer = Vec::new();
- let mut stream = $crate::AutoStream::new(buffer, choice);
- // Ignore errors rather than panic
- let _ = ::std::write!(&mut stream, $($arg)*);
- let buffer = stream.into_inner();
- // Should be UTF-8 but not wanting to panic
- let buffer = String::from_utf8_lossy(&buffer);
- ::std::println!("{}", buffer)
- } else {
- use std::io::Write as _;
-
- let mut stream = $crate::stdout();
- match ::std::writeln!(&mut stream, $($arg)*) {
- Err(e) if e.kind() != ::std::io::ErrorKind::BrokenPipe => {
- ::std::panic!("failed printing to stdout: {e}");
- }
- Err(_) | Ok(_) => {}
- }
- }
- }};
-}
-
-/// Prints to [`stderr`][crate::stderr].
-///
-/// Equivalent to the [`print!`] macro, except that output goes to
-/// `stderr` instead of `stdout`. See [`print!`] for
-/// example usage.
-///
-/// Use `eprint!` only for error and progress messages. Use `print!`
-/// instead for the primary output of your program.
-///
-/// **NOTE:** Not all `eprint!` calls will be captured in tests like [`std::eprint!`]
-/// - Capturing will automatically be activated in test binaries
-/// - Otherwise, only when the `test` feature is enabled
-///
-/// # Panics
-///
-/// Panics if writing to `stderr` fails for any reason **except** broken pipe.
-///
-/// Writing to non-blocking stdout can cause an error, which will lead
-/// this macro to panic.
-///
-/// # Examples
-///
-/// ```
-/// # #[cfg(feature = "auto")] {
-/// use anstream::eprint;
-///
-/// eprint!("Error: Could not complete task");
-/// # }
-/// ```
-#[cfg(feature = "auto")]
-#[macro_export]
-macro_rules! eprint {
- ($($arg:tt)*) => {{
- if cfg!(any(feature = "test", test)) {
- use std::io::Write as _;
-
- let stdio = std::io::stderr();
- let choice = $crate::AutoStream::choice(&stdio);
- let buffer = Vec::new();
- let mut stream = $crate::AutoStream::new(buffer, choice);
- // Ignore errors rather than panic
- let _ = ::std::write!(&mut stream, $($arg)*);
- let buffer = stream.into_inner();
- // Should be UTF-8 but not wanting to panic
- let buffer = String::from_utf8_lossy(&buffer);
- ::std::eprint!("{}", buffer)
- } else {
- use std::io::Write as _;
-
- let mut stream = $crate::stderr();
- match ::std::write!(&mut stream, $($arg)*) {
- Err(e) if e.kind() != ::std::io::ErrorKind::BrokenPipe => {
- ::std::panic!("failed printing to stdout: {e}");
- }
- Err(_) | Ok(_) => {}
- }
- }
- }};
-}
-
-/// Prints to [`stderr`][crate::stderr], with a newline.
-///
-/// Equivalent to the [`println!`] macro, except that output goes to
-/// `stderr` instead of `stdout`. See [`println!`] for
-/// example usage.
-///
-/// Use `eprintln!` only for error and progress messages. Use `println!`
-/// instead for the primary output of your program.
-///
-/// **NOTE:** Not all `eprintln!` calls will be captured in tests like [`std::eprintln!`]
-/// - Capturing will automatically be activated in test binaries
-/// - Otherwise, only when the `test` feature is enabled
-///
-/// # Panics
-///
-/// Panics if writing to `stderr` fails for any reason **except** broken pipe.
-///
-/// Writing to non-blocking stdout can cause an error, which will lead
-/// this macro to panic.
-///
-/// # Examples
-///
-/// ```
-/// # #[cfg(feature = "auto")] {
-/// use anstream::eprintln;
-///
-/// eprintln!("Error: Could not complete task");
-/// # }
-/// ```
-#[cfg(feature = "auto")]
-#[macro_export]
-macro_rules! eprintln {
- () => {
- $crate::eprint!("\n")
- };
- ($($arg:tt)*) => {{
- if cfg!(any(feature = "test", test)) {
- use std::io::Write as _;
-
- let stdio = std::io::stderr();
- let choice = $crate::AutoStream::choice(&stdio);
- let buffer = Vec::new();
- let mut stream = $crate::AutoStream::new(buffer, choice);
- // Ignore errors rather than panic
- let _ = ::std::write!(&mut stream, $($arg)*);
- let buffer = stream.into_inner();
- // Should be UTF-8 but not wanting to panic
- let buffer = String::from_utf8_lossy(&buffer);
- ::std::eprintln!("{}", buffer)
- } else {
- use std::io::Write as _;
-
- let mut stream = $crate::stderr();
- match ::std::writeln!(&mut stream, $($arg)*) {
- Err(e) if e.kind() != ::std::io::ErrorKind::BrokenPipe => {
- ::std::panic!("failed printing to stdout: {e}");
- }
- Err(_) | Ok(_) => {}
- }
- }
- }};
-}
-
-/// Panics the current thread.
-///
-/// This allows a program to terminate immediately and provide feedback
-/// to the caller of the program.
-///
-/// This macro is the perfect way to assert conditions in example code and in
-/// tests. `panic!` is closely tied with the `unwrap` method of both
-/// [`Option`][ounwrap] and [`Result`][runwrap] enums. Both implementations call
-/// `panic!` when they are set to [`None`] or [`Err`] variants.
-///
-/// When using `panic!()` you can specify a string payload, that is built using
-/// the [`format!`] syntax. That payload is used when injecting the panic into
-/// the calling Rust thread, causing the thread to panic entirely.
-///
-/// The behavior of the default `std` hook, i.e. the code that runs directly
-/// after the panic is invoked, is to print the message payload to
-/// `stderr` along with the file/line/column information of the `panic!()`
-/// call. You can override the panic hook using [`std::panic::set_hook()`].
-/// Inside the hook a panic can be accessed as a `&dyn Any + Send`,
-/// which contains either a `&str` or `String` for regular `panic!()` invocations.
-/// To panic with a value of another other type, [`panic_any`] can be used.
-///
-/// See also the macro [`compile_error!`], for raising errors during compilation.
-///
-/// # When to use `panic!` vs `Result`
-///
-/// The Rust language provides two complementary systems for constructing /
-/// representing, reporting, propagating, reacting to, and discarding errors. These
-/// responsibilities are collectively known as "error handling." `panic!` and
-/// `Result` are similar in that they are each the primary interface of their
-/// respective error handling systems; however, the meaning these interfaces attach
-/// to their errors and the responsibilities they fulfill within their respective
-/// error handling systems differ.
-///
-/// The `panic!` macro is used to construct errors that represent a bug that has
-/// been detected in your program. With `panic!` you provide a message that
-/// describes the bug and the language then constructs an error with that message,
-/// reports it, and propagates it for you.
-///
-/// `Result` on the other hand is used to wrap other types that represent either
-/// the successful result of some computation, `Ok(T)`, or error types that
-/// represent an anticipated runtime failure mode of that computation, `Err(E)`.
-/// `Result` is used alongside user defined types which represent the various
-/// anticipated runtime failure modes that the associated computation could
-/// encounter. `Result` must be propagated manually, often with the the help of the
-/// `?` operator and `Try` trait, and they must be reported manually, often with
-/// the help of the `Error` trait.
-///
-/// For more detailed information about error handling check out the [book] or the
-/// [`std::result`] module docs.
-///
-/// [ounwrap]: Option::unwrap
-/// [runwrap]: Result::unwrap
-/// [`std::panic::set_hook()`]: ../std/panic/fn.set_hook.html
-/// [`panic_any`]: ../std/panic/fn.panic_any.html
-/// [`Box`]: ../std/boxed/struct.Box.html
-/// [`Any`]: crate::any::Any
-/// [`format!`]: ../std/macro.format.html
-/// [book]: ../book/ch09-00-error-handling.html
-/// [`std::result`]: ../std/result/index.html
-///
-/// # Current implementation
-///
-/// If the main thread panics it will terminate all your threads and end your
-/// program with code `101`.
-///
-/// # Examples
-///
-/// ```should_panic
-/// # #![allow(unreachable_code)]
-/// use anstream::panic;
-/// panic!();
-/// panic!("this is a terrible mistake!");
-/// panic!("this is a {} {message}", "fancy", message = "message");
-/// ```
-#[cfg(feature = "auto")]
-#[macro_export]
-macro_rules! panic {
- () => {
- ::std::panic!()
- };
- ($($arg:tt)*) => {{
- use std::io::Write as _;
-
- let panic_stream = std::io::stderr();
- let choice = $crate::AutoStream::choice(&panic_stream);
- let buffer = Vec::new();
- let mut stream = $crate::AutoStream::new(buffer, choice);
- // Ignore errors rather than panic
- let _ = ::std::write!(&mut stream, $($arg)*);
- let buffer = stream.into_inner();
- // Should be UTF-8 but not wanting to panic
- let buffer = String::from_utf8_lossy(&buffer).into_owned();
- ::std::panic!("{}", buffer)
- }};
-}
diff --git a/vendor/anstream/src/stream.rs b/vendor/anstream/src/stream.rs
deleted file mode 100644
index e2f7e68..0000000
--- a/vendor/anstream/src/stream.rs
+++ /dev/null
@@ -1,261 +0,0 @@
-//! Higher-level traits to describe writeable streams
-
-/// Required functionality for underlying [`std::io::Write`] for adaptation
-#[cfg(not(all(windows, feature = "wincon")))]
-pub trait RawStream: std::io::Write + IsTerminal + private::Sealed {}
-
-/// Required functionality for underlying [`std::io::Write`] for adaptation
-#[cfg(all(windows, feature = "wincon"))]
-pub trait RawStream:
- std::io::Write + IsTerminal + anstyle_wincon::WinconStream + private::Sealed
-{
-}
-
-impl RawStream for std::io::Stdout {}
-
-impl RawStream for std::io::StdoutLock<'_> {}
-
-impl RawStream for &'_ mut std::io::StdoutLock<'_> {}
-
-impl RawStream for std::io::Stderr {}
-
-impl RawStream for std::io::StderrLock<'_> {}
-
-impl RawStream for &'_ mut std::io::StderrLock<'_> {}
-
-impl RawStream for Box<dyn std::io::Write> {}
-
-impl RawStream for &'_ mut Box<dyn std::io::Write> {}
-
-impl RawStream for Vec<u8> {}
-
-impl RawStream for &'_ mut Vec<u8> {}
-
-impl RawStream for std::fs::File {}
-
-impl RawStream for &'_ mut std::fs::File {}
-
-#[allow(deprecated)]
-impl RawStream for crate::Buffer {}
-
-#[allow(deprecated)]
-impl RawStream for &'_ mut crate::Buffer {}
-
-pub trait IsTerminal: private::Sealed {
- fn is_terminal(&self) -> bool;
-}
-
-impl IsTerminal for std::io::Stdout {
- #[inline]
- fn is_terminal(&self) -> bool {
- std::io::IsTerminal::is_terminal(self)
- }
-}
-
-impl IsTerminal for std::io::StdoutLock<'_> {
- #[inline]
- fn is_terminal(&self) -> bool {
- std::io::IsTerminal::is_terminal(self)
- }
-}
-
-impl IsTerminal for &'_ mut std::io::StdoutLock<'_> {
- #[inline]
- fn is_terminal(&self) -> bool {
- (**self).is_terminal()
- }
-}
-
-impl IsTerminal for std::io::Stderr {
- #[inline]
- fn is_terminal(&self) -> bool {
- std::io::IsTerminal::is_terminal(self)
- }
-}
-
-impl IsTerminal for std::io::StderrLock<'_> {
- #[inline]
- fn is_terminal(&self) -> bool {
- std::io::IsTerminal::is_terminal(self)
- }
-}
-
-impl IsTerminal for &'_ mut std::io::StderrLock<'_> {
- #[inline]
- fn is_terminal(&self) -> bool {
- (**self).is_terminal()
- }
-}
-
-impl IsTerminal for Box<dyn std::io::Write> {
- #[inline]
- fn is_terminal(&self) -> bool {
- false
- }
-}
-
-impl IsTerminal for &'_ mut Box<dyn std::io::Write> {
- #[inline]
- fn is_terminal(&self) -> bool {
- false
- }
-}
-
-impl IsTerminal for Vec<u8> {
- #[inline]
- fn is_terminal(&self) -> bool {
- false
- }
-}
-
-impl IsTerminal for &'_ mut Vec<u8> {
- #[inline]
- fn is_terminal(&self) -> bool {
- false
- }
-}
-
-impl IsTerminal for std::fs::File {
- #[inline]
- fn is_terminal(&self) -> bool {
- std::io::IsTerminal::is_terminal(self)
- }
-}
-
-impl IsTerminal for &'_ mut std::fs::File {
- #[inline]
- fn is_terminal(&self) -> bool {
- (**self).is_terminal()
- }
-}
-
-#[allow(deprecated)]
-impl IsTerminal for crate::Buffer {
- #[inline]
- fn is_terminal(&self) -> bool {
- false
- }
-}
-
-#[allow(deprecated)]
-impl IsTerminal for &'_ mut crate::Buffer {
- #[inline]
- fn is_terminal(&self) -> bool {
- (**self).is_terminal()
- }
-}
-
-pub trait AsLockedWrite: private::Sealed {
- type Write<'w>: RawStream + 'w
- where
- Self: 'w;
-
- fn as_locked_write(&mut self) -> Self::Write<'_>;
-}
-
-impl AsLockedWrite for std::io::Stdout {
- type Write<'w> = std::io::StdoutLock<'w>;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self.lock()
- }
-}
-
-impl AsLockedWrite for std::io::StdoutLock<'static> {
- type Write<'w> = &'w mut Self;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self
- }
-}
-
-impl AsLockedWrite for std::io::Stderr {
- type Write<'w> = std::io::StderrLock<'w>;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self.lock()
- }
-}
-
-impl AsLockedWrite for std::io::StderrLock<'static> {
- type Write<'w> = &'w mut Self;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self
- }
-}
-
-impl AsLockedWrite for Box<dyn std::io::Write> {
- type Write<'w> = &'w mut Self;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self
- }
-}
-
-impl AsLockedWrite for Vec<u8> {
- type Write<'w> = &'w mut Self;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self
- }
-}
-
-impl AsLockedWrite for std::fs::File {
- type Write<'w> = &'w mut Self;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self
- }
-}
-
-#[allow(deprecated)]
-impl AsLockedWrite for crate::Buffer {
- type Write<'w> = &'w mut Self;
-
- #[inline]
- fn as_locked_write(&mut self) -> Self::Write<'_> {
- self
- }
-}
-
-mod private {
- pub trait Sealed {}
-
- impl Sealed for std::io::Stdout {}
-
- impl Sealed for std::io::StdoutLock<'_> {}
-
- impl Sealed for &'_ mut std::io::StdoutLock<'_> {}
-
- impl Sealed for std::io::Stderr {}
-
- impl Sealed for std::io::StderrLock<'_> {}
-
- impl Sealed for &'_ mut std::io::StderrLock<'_> {}
-
- impl Sealed for Box<dyn std::io::Write> {}
-
- impl Sealed for &'_ mut Box<dyn std::io::Write> {}
-
- impl Sealed for Vec<u8> {}
-
- impl Sealed for &'_ mut Vec<u8> {}
-
- impl Sealed for std::fs::File {}
-
- impl Sealed for &'_ mut std::fs::File {}
-
- #[allow(deprecated)]
- impl Sealed for crate::Buffer {}
-
- #[allow(deprecated)]
- impl Sealed for &'_ mut crate::Buffer {}
-}
diff --git a/vendor/anstream/src/strip.rs b/vendor/anstream/src/strip.rs
deleted file mode 100644
index d7fda04..0000000
--- a/vendor/anstream/src/strip.rs
+++ /dev/null
@@ -1,219 +0,0 @@
-use crate::adapter::StripBytes;
-use crate::stream::AsLockedWrite;
-use crate::stream::RawStream;
-
-/// Only pass printable data to the inner `Write`
-#[derive(Debug)]
-pub struct StripStream<S>
-where
- S: RawStream,
-{
- raw: S,
- state: StripBytes,
-}
-
-impl<S> StripStream<S>
-where
- S: RawStream,
-{
- /// Only pass printable data to the inner `Write`
- #[inline]
- pub fn new(raw: S) -> Self {
- Self {
- raw,
- state: Default::default(),
- }
- }
-
- /// Get the wrapped [`RawStream`]
- #[inline]
- pub fn into_inner(self) -> S {
- self.raw
- }
-
- #[inline]
- pub fn is_terminal(&self) -> bool {
- self.raw.is_terminal()
- }
-}
-
-impl StripStream<std::io::Stdout> {
- /// Get exclusive access to the `StripStream`
- ///
- /// Why?
- /// - Faster performance when writing in a loop
- /// - Avoid other threads interleaving output with the current thread
- #[inline]
- pub fn lock(self) -> StripStream<std::io::StdoutLock<'static>> {
- StripStream {
- raw: self.raw.lock(),
- state: self.state,
- }
- }
-}
-
-impl StripStream<std::io::Stderr> {
- /// Get exclusive access to the `StripStream`
- ///
- /// Why?
- /// - Faster performance when writing in a loop
- /// - Avoid other threads interleaving output with the current thread
- #[inline]
- pub fn lock(self) -> StripStream<std::io::StderrLock<'static>> {
- StripStream {
- raw: self.raw.lock(),
- state: self.state,
- }
- }
-}
-
-impl<S> std::io::Write for StripStream<S>
-where
- S: RawStream + AsLockedWrite,
-{
- // Must forward all calls to ensure locking happens appropriately
- #[inline]
- fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
- write(&mut self.raw.as_locked_write(), &mut self.state, buf)
- }
- #[inline]
- fn write_vectored(&mut self, bufs: &[std::io::IoSlice<'_>]) -> std::io::Result<usize> {
- let buf = bufs
- .iter()
- .find(|b| !b.is_empty())
- .map(|b| &**b)
- .unwrap_or(&[][..]);
- self.write(buf)
- }
- // is_write_vectored: nightly only
- #[inline]
- fn flush(&mut self) -> std::io::Result<()> {
- self.raw.as_locked_write().flush()
- }
- #[inline]
- fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> {
- write_all(&mut self.raw.as_locked_write(), &mut self.state, buf)
- }
- // write_all_vectored: nightly only
- #[inline]
- fn write_fmt(&mut self, args: std::fmt::Arguments<'_>) -> std::io::Result<()> {
- write_fmt(&mut self.raw.as_locked_write(), &mut self.state, args)
- }
-}
-
-fn write(
- raw: &mut dyn std::io::Write,
- state: &mut StripBytes,
- buf: &[u8],
-) -> std::io::Result<usize> {
- let initial_state = state.clone();
-
- for printable in state.strip_next(buf) {
- let possible = printable.len();
- let written = raw.write(printable)?;
- if possible != written {
- let divergence = &printable[written..];
- let offset = offset_to(buf, divergence);
- let consumed = &buf[offset..];
- *state = initial_state;
- state.strip_next(consumed).last();
- return Ok(offset);
- }
- }
- Ok(buf.len())
-}
-
-fn write_all(
- raw: &mut dyn std::io::Write,
- state: &mut StripBytes,
- buf: &[u8],
-) -> std::io::Result<()> {
- for printable in state.strip_next(buf) {
- raw.write_all(printable)?;
- }
- Ok(())
-}
-
-fn write_fmt(
- raw: &mut dyn std::io::Write,
- state: &mut StripBytes,
- args: std::fmt::Arguments<'_>,
-) -> std::io::Result<()> {
- let write_all = |buf: &[u8]| write_all(raw, state, buf);
- crate::fmt::Adapter::new(write_all).write_fmt(args)
-}
-
-#[inline]
-fn offset_to(total: &[u8], subslice: &[u8]) -> usize {
- let total = total.as_ptr();
- let subslice = subslice.as_ptr();
-
- debug_assert!(
- total <= subslice,
- "`Offset::offset_to` only accepts slices of `self`"
- );
- subslice as usize - total as usize
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
- use proptest::prelude::*;
- use std::io::Write as _;
-
- proptest! {
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_all_no_escapes(s in "\\PC*") {
- let buffer = Vec::new();
- let mut stream = StripStream::new(buffer);
- stream.write_all(s.as_bytes()).unwrap();
- let buffer = stream.into_inner();
- let actual = std::str::from_utf8(buffer.as_ref()).unwrap();
- assert_eq!(s, actual);
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_byte_no_escapes(s in "\\PC*") {
- let buffer = Vec::new();
- let mut stream = StripStream::new(buffer);
- for byte in s.as_bytes() {
- stream.write_all(&[*byte]).unwrap();
- }
- let buffer = stream.into_inner();
- let actual = std::str::from_utf8(buffer.as_ref()).unwrap();
- assert_eq!(s, actual);
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_all_random(s in any::<Vec<u8>>()) {
- let buffer = Vec::new();
- let mut stream = StripStream::new(buffer);
- stream.write_all(s.as_slice()).unwrap();
- let buffer = stream.into_inner();
- if let Ok(actual) = std::str::from_utf8(buffer.as_ref()) {
- for char in actual.chars() {
- assert!(!char.is_ascii() || !char.is_control() || char.is_ascii_whitespace(), "{:?} -> {:?}: {:?}", String::from_utf8_lossy(&s), actual, char);
- }
- }
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_byte_random(s in any::<Vec<u8>>()) {
- let buffer = Vec::new();
- let mut stream = StripStream::new(buffer);
- for byte in s.as_slice() {
- stream.write_all(&[*byte]).unwrap();
- }
- let buffer = stream.into_inner();
- if let Ok(actual) = std::str::from_utf8(buffer.as_ref()) {
- for char in actual.chars() {
- assert!(!char.is_ascii() || !char.is_control() || char.is_ascii_whitespace(), "{:?} -> {:?}: {:?}", String::from_utf8_lossy(&s), actual, char);
- }
- }
- }
- }
-}
diff --git a/vendor/anstream/src/wincon.rs b/vendor/anstream/src/wincon.rs
deleted file mode 100644
index a5aa5e7..0000000
--- a/vendor/anstream/src/wincon.rs
+++ /dev/null
@@ -1,210 +0,0 @@
-use crate::adapter::WinconBytes;
-use crate::stream::AsLockedWrite;
-use crate::stream::RawStream;
-
-/// Only pass printable data to the inner `Write`
-#[cfg(feature = "wincon")] // here mostly for documentation purposes
-#[derive(Debug)]
-pub struct WinconStream<S>
-where
- S: RawStream,
-{
- raw: S,
- // `WinconBytes` is especially large compared to other variants of `AutoStream`, so boxing it
- // here so `AutoStream` doesn't have to discard one allocation and create another one when
- // calling `AutoStream::lock`
- state: Box<WinconBytes>,
-}
-
-impl<S> WinconStream<S>
-where
- S: RawStream,
-{
- /// Only pass printable data to the inner `Write`
- #[inline]
- pub fn new(raw: S) -> Self {
- Self {
- raw,
- state: Default::default(),
- }
- }
-
- /// Get the wrapped [`RawStream`]
- #[inline]
- pub fn into_inner(self) -> S {
- self.raw
- }
-
- #[inline]
- pub fn is_terminal(&self) -> bool {
- self.raw.is_terminal()
- }
-}
-
-impl WinconStream<std::io::Stdout> {
- /// Get exclusive access to the `WinconStream`
- ///
- /// Why?
- /// - Faster performance when writing in a loop
- /// - Avoid other threads interleaving output with the current thread
- #[inline]
- pub fn lock(self) -> WinconStream<std::io::StdoutLock<'static>> {
- WinconStream {
- raw: self.raw.lock(),
- state: self.state,
- }
- }
-}
-
-impl WinconStream<std::io::Stderr> {
- /// Get exclusive access to the `WinconStream`
- ///
- /// Why?
- /// - Faster performance when writing in a loop
- /// - Avoid other threads interleaving output with the current thread
- #[inline]
- pub fn lock(self) -> WinconStream<std::io::StderrLock<'static>> {
- WinconStream {
- raw: self.raw.lock(),
- state: self.state,
- }
- }
-}
-
-impl<S> std::io::Write for WinconStream<S>
-where
- S: RawStream + AsLockedWrite,
-{
- // Must forward all calls to ensure locking happens appropriately
- #[inline]
- fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
- write(&mut self.raw.as_locked_write(), &mut self.state, buf)
- }
- #[inline]
- fn write_vectored(&mut self, bufs: &[std::io::IoSlice<'_>]) -> std::io::Result<usize> {
- let buf = bufs
- .iter()
- .find(|b| !b.is_empty())
- .map(|b| &**b)
- .unwrap_or(&[][..]);
- self.write(buf)
- }
- // is_write_vectored: nightly only
- #[inline]
- fn flush(&mut self) -> std::io::Result<()> {
- self.raw.as_locked_write().flush()
- }
- #[inline]
- fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> {
- write_all(&mut self.raw.as_locked_write(), &mut self.state, buf)
- }
- // write_all_vectored: nightly only
- #[inline]
- fn write_fmt(&mut self, args: std::fmt::Arguments<'_>) -> std::io::Result<()> {
- write_fmt(&mut self.raw.as_locked_write(), &mut self.state, args)
- }
-}
-
-fn write(raw: &mut dyn RawStream, state: &mut WinconBytes, buf: &[u8]) -> std::io::Result<usize> {
- for (style, printable) in state.extract_next(buf) {
- let fg = style.get_fg_color().and_then(cap_wincon_color);
- let bg = style.get_bg_color().and_then(cap_wincon_color);
- let written = raw.write_colored(fg, bg, printable.as_bytes())?;
- let possible = printable.len();
- if possible != written {
- // HACK: Unsupported atm
- break;
- }
- }
- Ok(buf.len())
-}
-
-fn write_all(raw: &mut dyn RawStream, state: &mut WinconBytes, buf: &[u8]) -> std::io::Result<()> {
- for (style, printable) in state.extract_next(buf) {
- let mut buf = printable.as_bytes();
- let fg = style.get_fg_color().and_then(cap_wincon_color);
- let bg = style.get_bg_color().and_then(cap_wincon_color);
- while !buf.is_empty() {
- match raw.write_colored(fg, bg, buf) {
- Ok(0) => {
- return Err(std::io::Error::new(
- std::io::ErrorKind::WriteZero,
- "failed to write whole buffer",
- ));
- }
- Ok(n) => buf = &buf[n..],
- Err(ref e) if e.kind() == std::io::ErrorKind::Interrupted => {}
- Err(e) => return Err(e),
- }
- }
- }
- Ok(())
-}
-
-fn write_fmt(
- raw: &mut dyn RawStream,
- state: &mut WinconBytes,
- args: std::fmt::Arguments<'_>,
-) -> std::io::Result<()> {
- let write_all = |buf: &[u8]| write_all(raw, state, buf);
- crate::fmt::Adapter::new(write_all).write_fmt(args)
-}
-
-fn cap_wincon_color(color: anstyle::Color) -> Option<anstyle::AnsiColor> {
- match color {
- anstyle::Color::Ansi(c) => Some(c),
- anstyle::Color::Ansi256(c) => c.into_ansi(),
- anstyle::Color::Rgb(_) => None,
- }
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
- use proptest::prelude::*;
- use std::io::Write as _;
-
- proptest! {
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_all_no_escapes(s in "\\PC*") {
- let buffer = Vec::new();
- let mut stream = WinconStream::new(buffer);
- stream.write_all(s.as_bytes()).unwrap();
- let buffer = stream.into_inner();
- let actual = std::str::from_utf8(buffer.as_ref()).unwrap();
- assert_eq!(s, actual);
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_byte_no_escapes(s in "\\PC*") {
- let buffer = Vec::new();
- let mut stream = WinconStream::new(buffer);
- for byte in s.as_bytes() {
- stream.write_all(&[*byte]).unwrap();
- }
- let buffer = stream.into_inner();
- let actual = std::str::from_utf8(buffer.as_ref()).unwrap();
- assert_eq!(s, actual);
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_all_random(s in any::<Vec<u8>>()) {
- let buffer = Vec::new();
- let mut stream = WinconStream::new(buffer);
- stream.write_all(s.as_slice()).unwrap();
- }
-
- #[test]
- #[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
- fn write_byte_random(s in any::<Vec<u8>>()) {
- let buffer = Vec::new();
- let mut stream = WinconStream::new(buffer);
- for byte in s.as_slice() {
- stream.write_all(&[*byte]).unwrap();
- }
- }
- }
-}