Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
This commit is contained in:
1
vendor/clap/.cargo-checksum.json
vendored
Normal file
1
vendor/clap/.cargo-checksum.json
vendored
Normal file
File diff suppressed because one or more lines are too long
869
vendor/clap/Cargo.lock
generated
vendored
Normal file
869
vendor/clap/Cargo.lock
generated
vendored
Normal file
@ -0,0 +1,869 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||
|
||||
[[package]]
|
||||
name = "anstream"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bff2cf94a3dbe2d57cbd56485e1bd7436455058034d6c2d47be51d4e5e4bc6ab"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"anstyle-parse",
|
||||
"anstyle-query",
|
||||
"anstyle-wincon",
|
||||
"colorchoice",
|
||||
"utf8parse",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-parse"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
|
||||
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.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0238ca56c96dfa37bdf7c373c8886dd591322500aceeeccdb2216fe06dc2f796"
|
||||
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 = "backtrace"
|
||||
version = "0.3.67"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "basic-toml"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.4.13"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
"humantime",
|
||||
"rustversion",
|
||||
"shlex",
|
||||
"snapbox",
|
||||
"trybuild",
|
||||
"trycmd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.4.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
"backtrace",
|
||||
"clap_lex",
|
||||
"strsim",
|
||||
"terminal_size",
|
||||
"unicase",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "4.4.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[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 = "crossbeam-channel"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"cfg-if",
|
||||
"crossbeam-utils",
|
||||
"memoffset",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
|
||||
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 = "escargot"
|
||||
version = "0.5.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f5584ba17d7ab26a8a7284f13e5bd196294dd2f2d79773cff29b9e9edef601a6"
|
||||
dependencies = [
|
||||
"log",
|
||||
"once_cell",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.27.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
||||
|
||||
[[package]]
|
||||
name = "humantime-serde"
|
||||
version = "1.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
|
||||
dependencies = [
|
||||
"humantime",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.147"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
|
||||
|
||||
[[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 = "memchr"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.6.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "normalize-line-endings"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
|
||||
|
||||
[[package]]
|
||||
name = "num_cpus"
|
||||
version = "1.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.30.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||
|
||||
[[package]]
|
||||
name = "os_pipe"
|
||||
version = "1.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.70"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
|
||||
dependencies = [
|
||||
"either",
|
||||
"rayon-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"crossbeam-deque",
|
||||
"crossbeam-utils",
|
||||
"num_cpus",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.38.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
||||
|
||||
[[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.180"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.180"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.104"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
|
||||
|
||||
[[package]]
|
||||
name = "similar"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62ac7f900db32bf3fd12e0117dd3dc4da74bc52ebaac97f39668446d89694803"
|
||||
|
||||
[[package]]
|
||||
name = "snapbox"
|
||||
version = "0.4.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4f1976ee8fd1be27d5f72c98be0aac4397a882a4736935d47418a5fbbd12042"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
"escargot",
|
||||
"libc",
|
||||
"normalize-line-endings",
|
||||
"os_pipe",
|
||||
"similar",
|
||||
"snapbox-macros",
|
||||
"wait-timeout",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "snapbox-macros"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed1559baff8a696add3322b9be3e940d433e7bb4e38d79017205fd37ff28b28e"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "terminal_size"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
|
||||
dependencies = [
|
||||
"rustix",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.20.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "trybuild"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8419ecd263363827c5730386f418715766f584e2f874d32c23c5b00bd9727e7e"
|
||||
dependencies = [
|
||||
"basic-toml",
|
||||
"glob",
|
||||
"once_cell",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"termcolor",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "trycmd"
|
||||
version = "0.14.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed009372a42fb103e6f8767b9222925485e03cca032b700d203e2c5b67bee4fb"
|
||||
dependencies = [
|
||||
"glob",
|
||||
"humantime",
|
||||
"humantime-serde",
|
||||
"rayon",
|
||||
"serde",
|
||||
"shlex",
|
||||
"snapbox",
|
||||
"toml_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicase"
|
||||
version = "2.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
|
||||
dependencies = [
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
|
||||
|
||||
[[package]]
|
||||
name = "utf8parse"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "wait-timeout"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[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.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||
dependencies = [
|
||||
"windows-targets 0.48.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
dependencies = [
|
||||
"windows-targets 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm 0.48.5",
|
||||
"windows_aarch64_msvc 0.48.5",
|
||||
"windows_i686_gnu 0.48.5",
|
||||
"windows_i686_msvc 0.48.5",
|
||||
"windows_x86_64_gnu 0.48.5",
|
||||
"windows_x86_64_gnullvm 0.48.5",
|
||||
"windows_x86_64_msvc 0.48.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm 0.52.0",
|
||||
"windows_aarch64_msvc 0.52.0",
|
||||
"windows_i686_gnu 0.52.0",
|
||||
"windows_i686_msvc 0.52.0",
|
||||
"windows_x86_64_gnu 0.52.0",
|
||||
"windows_x86_64_gnullvm 0.52.0",
|
||||
"windows_x86_64_msvc 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
|
||||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.5.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
445
vendor/clap/Cargo.toml
vendored
Normal file
445
vendor/clap/Cargo.toml
vendored
Normal file
@ -0,0 +1,445 @@
|
||||
# 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 = "clap"
|
||||
version = "4.4.13"
|
||||
include = [
|
||||
"build.rs",
|
||||
"src/**/*",
|
||||
"Cargo.toml",
|
||||
"LICENSE*",
|
||||
"README.md",
|
||||
"benches/**/*",
|
||||
"examples/**/*",
|
||||
]
|
||||
description = "A simple to use, efficient, and full-featured Command Line Argument Parser"
|
||||
readme = "README.md"
|
||||
keywords = [
|
||||
"argument",
|
||||
"cli",
|
||||
"arg",
|
||||
"parser",
|
||||
"parse",
|
||||
]
|
||||
categories = ["command-line-interface"]
|
||||
license = "MIT OR Apache-2.0"
|
||||
repository = "https://github.com/clap-rs/clap"
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
cargo-args = [
|
||||
"-Zunstable-options",
|
||||
"-Zrustdoc-scrape-examples",
|
||||
]
|
||||
features = ["unstable-doc"]
|
||||
rustdoc-args = [
|
||||
"--cfg",
|
||||
"docsrs",
|
||||
"--generate-link-to-definition",
|
||||
]
|
||||
|
||||
[package.metadata.playground]
|
||||
features = ["unstable-doc"]
|
||||
|
||||
[package.metadata.release]
|
||||
shared-version = true
|
||||
tag-name = "v{{version}}"
|
||||
|
||||
[[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/clap-rs/clap/compare/{{tag_name}}...HEAD"""
|
||||
search = "<!-- next-url -->"
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CITATION.cff"
|
||||
replace = "date-released: {{date}}"
|
||||
search = "^date-released: ....-..-.."
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CITATION.cff"
|
||||
replace = "version: {{version}}"
|
||||
search = '^version: .+\..+\..+'
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
exactly = 1
|
||||
file = "src/lib.rs"
|
||||
replace = "blob/v{{version}}/CHANGELOG.md"
|
||||
search = 'blob/v.+\..+\..+/CHANGELOG.md'
|
||||
|
||||
[profile.bench]
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
|
||||
[profile.test]
|
||||
opt-level = 1
|
||||
|
||||
[lib]
|
||||
bench = false
|
||||
|
||||
[[example]]
|
||||
name = "demo"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "cargo-example"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "cargo-example-derive"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "escaped-positional"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "escaped-positional-derive"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "find"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "git-derive"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "typed-derive"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "busybox"
|
||||
path = "examples/multicall-busybox.rs"
|
||||
|
||||
[[example]]
|
||||
name = "hostname"
|
||||
path = "examples/multicall-hostname.rs"
|
||||
|
||||
[[example]]
|
||||
name = "repl"
|
||||
path = "examples/repl.rs"
|
||||
required-features = ["help"]
|
||||
|
||||
[[example]]
|
||||
name = "01_quick"
|
||||
path = "examples/tutorial_builder/01_quick.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "02_apps"
|
||||
path = "examples/tutorial_builder/02_apps.rs"
|
||||
|
||||
[[example]]
|
||||
name = "02_crate"
|
||||
path = "examples/tutorial_builder/02_crate.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "02_app_settings"
|
||||
path = "examples/tutorial_builder/02_app_settings.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_01_flag_bool"
|
||||
path = "examples/tutorial_builder/03_01_flag_bool.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_01_flag_count"
|
||||
path = "examples/tutorial_builder/03_01_flag_count.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_02_option"
|
||||
path = "examples/tutorial_builder/03_02_option.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_02_option_mult"
|
||||
path = "examples/tutorial_builder/03_02_option_mult.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_03_positional"
|
||||
path = "examples/tutorial_builder/03_03_positional.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_03_positional_mult"
|
||||
path = "examples/tutorial_builder/03_03_positional_mult.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_04_subcommands"
|
||||
path = "examples/tutorial_builder/03_04_subcommands.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "03_05_default_values"
|
||||
path = "examples/tutorial_builder/03_05_default_values.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "04_01_possible"
|
||||
path = "examples/tutorial_builder/04_01_possible.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "04_01_enum"
|
||||
path = "examples/tutorial_builder/04_01_enum.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "04_02_parse"
|
||||
path = "examples/tutorial_builder/04_02_parse.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "04_02_validate"
|
||||
path = "examples/tutorial_builder/04_02_validate.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "04_03_relations"
|
||||
path = "examples/tutorial_builder/04_03_relations.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "04_04_custom"
|
||||
path = "examples/tutorial_builder/04_04_custom.rs"
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "05_01_assert"
|
||||
path = "examples/tutorial_builder/05_01_assert.rs"
|
||||
test = true
|
||||
required-features = ["cargo"]
|
||||
|
||||
[[example]]
|
||||
name = "01_quick_derive"
|
||||
path = "examples/tutorial_derive/01_quick.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "02_apps_derive"
|
||||
path = "examples/tutorial_derive/02_apps.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "02_crate_derive"
|
||||
path = "examples/tutorial_derive/02_crate.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "02_app_settings_derive"
|
||||
path = "examples/tutorial_derive/02_app_settings.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_01_flag_bool_derive"
|
||||
path = "examples/tutorial_derive/03_01_flag_bool.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_01_flag_count_derive"
|
||||
path = "examples/tutorial_derive/03_01_flag_count.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_02_option_derive"
|
||||
path = "examples/tutorial_derive/03_02_option.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_02_option_mult_derive"
|
||||
path = "examples/tutorial_derive/03_02_option_mult.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_03_positional_derive"
|
||||
path = "examples/tutorial_derive/03_03_positional.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_03_positional_mult_derive"
|
||||
path = "examples/tutorial_derive/03_03_positional_mult.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_04_subcommands_derive"
|
||||
path = "examples/tutorial_derive/03_04_subcommands.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_04_subcommands_alt_derive"
|
||||
path = "examples/tutorial_derive/03_04_subcommands_alt.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "03_05_default_values_derive"
|
||||
path = "examples/tutorial_derive/03_05_default_values.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "04_01_enum_derive"
|
||||
path = "examples/tutorial_derive/04_01_enum.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "04_02_parse_derive"
|
||||
path = "examples/tutorial_derive/04_02_parse.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "04_02_validate_derive"
|
||||
path = "examples/tutorial_derive/04_02_validate.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "04_03_relations_derive"
|
||||
path = "examples/tutorial_derive/04_03_relations.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "04_04_custom_derive"
|
||||
path = "examples/tutorial_derive/04_04_custom.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "05_01_assert_derive"
|
||||
path = "examples/tutorial_derive/05_01_assert.rs"
|
||||
test = true
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "interop_augment_args"
|
||||
path = "examples/derive_ref/augment_args.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "interop_augment_subcommands"
|
||||
path = "examples/derive_ref/augment_subcommands.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "interop_hand_subcommand"
|
||||
path = "examples/derive_ref/hand_subcommand.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[[example]]
|
||||
name = "interop_flatten_hand_args"
|
||||
path = "examples/derive_ref/flatten_hand_args.rs"
|
||||
required-features = ["derive"]
|
||||
|
||||
[dependencies.clap_builder]
|
||||
version = "=4.4.12"
|
||||
default-features = false
|
||||
|
||||
[dependencies.clap_derive]
|
||||
version = "=4.4.7"
|
||||
optional = true
|
||||
|
||||
[dev-dependencies.humantime]
|
||||
version = "2.1.0"
|
||||
|
||||
[dev-dependencies.rustversion]
|
||||
version = "1.0.14"
|
||||
|
||||
[dev-dependencies.shlex]
|
||||
version = "1.2.0"
|
||||
|
||||
[dev-dependencies.snapbox]
|
||||
version = "0.4.15"
|
||||
|
||||
[dev-dependencies.trybuild]
|
||||
version = "1.0.86"
|
||||
|
||||
[dev-dependencies.trycmd]
|
||||
version = "0.14.19"
|
||||
features = [
|
||||
"color-auto",
|
||||
"diff",
|
||||
"examples",
|
||||
]
|
||||
default-features = false
|
||||
|
||||
[features]
|
||||
cargo = ["clap_builder/cargo"]
|
||||
color = ["clap_builder/color"]
|
||||
debug = [
|
||||
"clap_builder/debug",
|
||||
"clap_derive?/debug",
|
||||
]
|
||||
default = [
|
||||
"std",
|
||||
"color",
|
||||
"help",
|
||||
"usage",
|
||||
"error-context",
|
||||
"suggestions",
|
||||
]
|
||||
deprecated = [
|
||||
"clap_builder/deprecated",
|
||||
"clap_derive?/deprecated",
|
||||
]
|
||||
derive = ["dep:clap_derive"]
|
||||
env = ["clap_builder/env"]
|
||||
error-context = ["clap_builder/error-context"]
|
||||
help = ["clap_builder/help"]
|
||||
std = ["clap_builder/std"]
|
||||
string = ["clap_builder/string"]
|
||||
suggestions = ["clap_builder/suggestions"]
|
||||
unicode = ["clap_builder/unicode"]
|
||||
unstable-doc = [
|
||||
"clap_builder/unstable-doc",
|
||||
"derive",
|
||||
]
|
||||
unstable-styles = ["clap_builder/unstable-styles"]
|
||||
unstable-v5 = [
|
||||
"clap_builder/unstable-v5",
|
||||
"clap_derive?/unstable-v5",
|
||||
"deprecated",
|
||||
]
|
||||
usage = ["clap_builder/usage"]
|
||||
wrap_help = ["clap_builder/wrap_help"]
|
202
vendor/clap/LICENSE-APACHE
vendored
Normal file
202
vendor/clap/LICENSE-APACHE
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
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.
|
||||
|
19
vendor/clap/LICENSE-MIT
vendored
Normal file
19
vendor/clap/LICENSE-MIT
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
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.
|
43
vendor/clap/README.md
vendored
Normal file
43
vendor/clap/README.md
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
# clap
|
||||
|
||||
> **Command Line Argument Parser for Rust**
|
||||
|
||||
[](https://crates.io/crates/clap)
|
||||
[](https://crates.io/crates/clap)
|
||||
[](LICENSE-APACHE)
|
||||
[](LICENSE-MIT)
|
||||
[](https://github.com/clap-rs/clap/actions/workflows/ci.yml?query=branch%3Amaster)
|
||||
[](https://coveralls.io/github/clap-rs/clap?branch=master)
|
||||
[](https://github.com/clap-rs/clap/graphs/contributors)
|
||||
|
||||
Dual-licensed under [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT).
|
||||
|
||||
## About
|
||||
|
||||
Create your command-line parser, with all of the bells and whistles, declaratively or procedurally.
|
||||
|
||||
For more details, see:
|
||||
- [docs.rs](https://docs.rs/clap/latest/clap/)
|
||||
- [examples](examples/)
|
||||
|
||||
## Sponsors
|
||||
|
||||
<!-- omit in TOC -->
|
||||
### Gold
|
||||
|
||||
[](https://opencollective.com/clap)
|
||||
|
||||
<!-- omit in TOC -->
|
||||
### Silver
|
||||
|
||||
[](https://opencollective.com/clap)
|
||||
|
||||
<!-- omit in TOC -->
|
||||
### Bronze
|
||||
|
||||
[](https://opencollective.com/clap)
|
||||
|
||||
<!-- omit in TOC -->
|
||||
### Backer
|
||||
|
||||
[](https://opencollective.com/clap)
|
16
vendor/clap/examples/README.md
vendored
Normal file
16
vendor/clap/examples/README.md
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
# Examples
|
||||
|
||||
We try to focus our documentation on the [four types of
|
||||
documentation](https://documentation.divio.com/). Examples fit into this by
|
||||
providing:
|
||||
- [Cookbook / How-To Guides](https://docs.rs/clap/latest/clap/_cookbook/index.html)
|
||||
- Tutorials ([derive](https://docs.rs/clap/latest/clap/_derive/_tutorial/index.html), [builder](https://docs.rs/clap/latest/clap/_tutorial/index.html))
|
||||
|
||||
This directory contains the source for the above.
|
||||
|
||||
## Contributing
|
||||
|
||||
New examples should fit within the above structure and support their narrative
|
||||
- Add the example to [Cargo.toml](../Cargo.toml) for any `required-features`
|
||||
- Document how the example works with a `.md` file which will be verified using [trycmd](https://docs.rs/trycmd)
|
||||
- Pull the `.rs` and `.md` file into the appropriate module doc comment to be accessible on docs.rs
|
38
vendor/clap/examples/cargo-example-derive.md
vendored
Normal file
38
vendor/clap/examples/cargo-example-derive.md
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
For more on creating a custom subcommand, see [the cargo
|
||||
book](https://doc.rust-lang.org/cargo/reference/external-tools.html#custom-subcommands).
|
||||
The crate [`clap-cargo`](https://github.com/crate-ci/clap-cargo) can help in
|
||||
mimicking cargo's interface.
|
||||
|
||||
The help looks like:
|
||||
```console
|
||||
$ cargo-example-derive --help
|
||||
Usage: cargo <COMMAND>
|
||||
|
||||
Commands:
|
||||
example-derive A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ cargo-example-derive example-derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: cargo example-derive [OPTIONS]
|
||||
|
||||
Options:
|
||||
--manifest-path <MANIFEST_PATH>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
Then to directly invoke the command, run:
|
||||
```console
|
||||
$ cargo-example-derive example-derive
|
||||
None
|
||||
|
||||
$ cargo-example-derive example-derive --manifest-path Cargo.toml
|
||||
Some("Cargo.toml")
|
||||
|
||||
```
|
20
vendor/clap/examples/cargo-example-derive.rs
vendored
Normal file
20
vendor/clap/examples/cargo-example-derive.rs
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)] // requires `derive` feature
|
||||
#[command(name = "cargo")]
|
||||
#[command(bin_name = "cargo")]
|
||||
enum CargoCli {
|
||||
ExampleDerive(ExampleDeriveArgs),
|
||||
}
|
||||
|
||||
#[derive(clap::Args)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct ExampleDeriveArgs {
|
||||
#[arg(long)]
|
||||
manifest_path: Option<std::path::PathBuf>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let CargoCli::ExampleDerive(args) = CargoCli::parse();
|
||||
println!("{:?}", args.manifest_path);
|
||||
}
|
38
vendor/clap/examples/cargo-example.md
vendored
Normal file
38
vendor/clap/examples/cargo-example.md
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
For more on creating a custom subcommand, see [the cargo
|
||||
book](https://doc.rust-lang.org/cargo/reference/external-tools.html#custom-subcommands).
|
||||
The crate [`clap-cargo`](https://github.com/crate-ci/clap-cargo) can help in
|
||||
mimicking cargo's interface.
|
||||
|
||||
The help looks like:
|
||||
```console
|
||||
$ cargo-example --help
|
||||
Usage: cargo <COMMAND>
|
||||
|
||||
Commands:
|
||||
example A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ cargo-example example --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: cargo example [OPTIONS]
|
||||
|
||||
Options:
|
||||
--manifest-path <PATH>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
Then to directly invoke the command, run:
|
||||
```console
|
||||
$ cargo-example example
|
||||
None
|
||||
|
||||
$ cargo-example example --manifest-path Cargo.toml
|
||||
Some("Cargo.toml")
|
||||
|
||||
```
|
18
vendor/clap/examples/cargo-example.rs
vendored
Normal file
18
vendor/clap/examples/cargo-example.rs
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
fn main() {
|
||||
let cmd = clap::Command::new("cargo")
|
||||
.bin_name("cargo")
|
||||
.subcommand_required(true)
|
||||
.subcommand(
|
||||
clap::command!("example").arg(
|
||||
clap::arg!(--"manifest-path" <PATH>)
|
||||
.value_parser(clap::value_parser!(std::path::PathBuf)),
|
||||
),
|
||||
);
|
||||
let matches = cmd.get_matches();
|
||||
let matches = match matches.subcommand() {
|
||||
Some(("example", matches)) => matches,
|
||||
_ => unreachable!("clap should ensure we don't get here"),
|
||||
};
|
||||
let manifest_path = matches.get_one::<std::path::PathBuf>("manifest-path");
|
||||
println!("{manifest_path:?}");
|
||||
}
|
17
vendor/clap/examples/demo.md
vendored
Normal file
17
vendor/clap/examples/demo.md
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
```console
|
||||
$ demo --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: demo[EXE] [OPTIONS] --name <NAME>
|
||||
|
||||
Options:
|
||||
-n, --name <NAME> Name of the person to greet
|
||||
-c, --count <COUNT> Number of times to greet [default: 1]
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ demo --name Me
|
||||
Hello Me!
|
||||
|
||||
```
|
||||
*(version number and `.exe` extension on windows replaced by placeholders)*
|
22
vendor/clap/examples/demo.rs
vendored
Normal file
22
vendor/clap/examples/demo.rs
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
use clap::Parser;
|
||||
|
||||
/// Simple program to greet a person
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Args {
|
||||
/// Name of the person to greet
|
||||
#[arg(short, long)]
|
||||
name: String,
|
||||
|
||||
/// Number of times to greet
|
||||
#[arg(short, long, default_value_t = 1)]
|
||||
count: u8,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Args::parse();
|
||||
|
||||
for _ in 0..args.count {
|
||||
println!("Hello {}!", args.name)
|
||||
}
|
||||
}
|
27
vendor/clap/examples/derive_ref/augment_args.rs
vendored
Normal file
27
vendor/clap/examples/derive_ref/augment_args.rs
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
use clap::{arg, Args, Command, FromArgMatches as _};
|
||||
|
||||
#[derive(Args, Debug)]
|
||||
struct DerivedArgs {
|
||||
#[arg(short, long)]
|
||||
derived: bool,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Command::new("CLI").arg(arg!(-b - -built).action(clap::ArgAction::SetTrue));
|
||||
// Augment built args with derived args
|
||||
let cli = DerivedArgs::augment_args(cli);
|
||||
|
||||
let matches = cli.get_matches();
|
||||
println!("Value of built: {:?}", matches.get_flag("built"));
|
||||
println!(
|
||||
"Value of derived via ArgMatches: {:?}",
|
||||
matches.get_flag("derived")
|
||||
);
|
||||
|
||||
// Since DerivedArgs implements FromArgMatches, we can extract it from the unstructured ArgMatches.
|
||||
// This is the main benefit of using derived arguments.
|
||||
let derived_matches = DerivedArgs::from_arg_matches(&matches)
|
||||
.map_err(|err| err.exit())
|
||||
.unwrap();
|
||||
println!("Value of derived: {derived_matches:#?}");
|
||||
}
|
21
vendor/clap/examples/derive_ref/augment_subcommands.rs
vendored
Normal file
21
vendor/clap/examples/derive_ref/augment_subcommands.rs
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
use clap::{Command, FromArgMatches as _, Parser, Subcommand as _};
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
enum Subcommands {
|
||||
Derived {
|
||||
#[arg(short, long)]
|
||||
derived_flag: bool,
|
||||
},
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Command::new("Built CLI");
|
||||
// Augment with derived subcommands
|
||||
let cli = Subcommands::augment_subcommands(cli);
|
||||
|
||||
let matches = cli.get_matches();
|
||||
let derived_subcommands = Subcommands::from_arg_matches(&matches)
|
||||
.map_err(|err| err.exit())
|
||||
.unwrap();
|
||||
println!("Derived subcommands: {derived_subcommands:#?}");
|
||||
}
|
91
vendor/clap/examples/derive_ref/flatten_hand_args.rs
vendored
Normal file
91
vendor/clap/examples/derive_ref/flatten_hand_args.rs
vendored
Normal file
@ -0,0 +1,91 @@
|
||||
use clap::error::Error;
|
||||
use clap::{Arg, ArgAction, ArgMatches, Args, Command, FromArgMatches, Parser};
|
||||
|
||||
#[derive(Debug)]
|
||||
struct CliArgs {
|
||||
foo: bool,
|
||||
bar: bool,
|
||||
quuz: Option<String>,
|
||||
}
|
||||
|
||||
impl FromArgMatches for CliArgs {
|
||||
fn from_arg_matches(matches: &ArgMatches) -> Result<Self, Error> {
|
||||
let mut matches = matches.clone();
|
||||
Self::from_arg_matches_mut(&mut matches)
|
||||
}
|
||||
fn from_arg_matches_mut(matches: &mut ArgMatches) -> Result<Self, Error> {
|
||||
Ok(Self {
|
||||
foo: matches.get_flag("foo"),
|
||||
bar: matches.get_flag("bar"),
|
||||
quuz: matches.remove_one::<String>("quuz"),
|
||||
})
|
||||
}
|
||||
fn update_from_arg_matches(&mut self, matches: &ArgMatches) -> Result<(), Error> {
|
||||
let mut matches = matches.clone();
|
||||
self.update_from_arg_matches_mut(&mut matches)
|
||||
}
|
||||
fn update_from_arg_matches_mut(&mut self, matches: &mut ArgMatches) -> Result<(), Error> {
|
||||
self.foo |= matches.get_flag("foo");
|
||||
self.bar |= matches.get_flag("bar");
|
||||
if let Some(quuz) = matches.remove_one::<String>("quuz") {
|
||||
self.quuz = Some(quuz);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Args for CliArgs {
|
||||
fn augment_args(cmd: Command) -> Command {
|
||||
cmd.arg(
|
||||
Arg::new("foo")
|
||||
.short('f')
|
||||
.long("foo")
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("bar")
|
||||
.short('b')
|
||||
.long("bar")
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("quuz")
|
||||
.short('q')
|
||||
.long("quuz")
|
||||
.action(ArgAction::Set),
|
||||
)
|
||||
}
|
||||
fn augment_args_for_update(cmd: Command) -> Command {
|
||||
cmd.arg(
|
||||
Arg::new("foo")
|
||||
.short('f')
|
||||
.long("foo")
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("bar")
|
||||
.short('b')
|
||||
.long("bar")
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("quuz")
|
||||
.short('q')
|
||||
.long("quuz")
|
||||
.action(ArgAction::Set),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
struct Cli {
|
||||
#[arg(short, long)]
|
||||
top_level: bool,
|
||||
#[command(flatten)]
|
||||
more_args: CliArgs,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Cli::parse();
|
||||
println!("{args:#?}");
|
||||
}
|
79
vendor/clap/examples/derive_ref/hand_subcommand.rs
vendored
Normal file
79
vendor/clap/examples/derive_ref/hand_subcommand.rs
vendored
Normal file
@ -0,0 +1,79 @@
|
||||
use clap::error::{Error, ErrorKind};
|
||||
use clap::{ArgMatches, Args as _, Command, FromArgMatches, Parser, Subcommand};
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
struct AddArgs {
|
||||
name: Vec<String>,
|
||||
}
|
||||
#[derive(Parser, Debug)]
|
||||
struct RemoveArgs {
|
||||
#[arg(short, long)]
|
||||
force: bool,
|
||||
name: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum CliSub {
|
||||
Add(AddArgs),
|
||||
Remove(RemoveArgs),
|
||||
}
|
||||
|
||||
impl FromArgMatches for CliSub {
|
||||
fn from_arg_matches(matches: &ArgMatches) -> Result<Self, Error> {
|
||||
match matches.subcommand() {
|
||||
Some(("add", args)) => Ok(Self::Add(AddArgs::from_arg_matches(args)?)),
|
||||
Some(("remove", args)) => Ok(Self::Remove(RemoveArgs::from_arg_matches(args)?)),
|
||||
Some((_, _)) => Err(Error::raw(
|
||||
ErrorKind::InvalidSubcommand,
|
||||
"Valid subcommands are `add` and `remove`",
|
||||
)),
|
||||
None => Err(Error::raw(
|
||||
ErrorKind::MissingSubcommand,
|
||||
"Valid subcommands are `add` and `remove`",
|
||||
)),
|
||||
}
|
||||
}
|
||||
fn update_from_arg_matches(&mut self, matches: &ArgMatches) -> Result<(), Error> {
|
||||
match matches.subcommand() {
|
||||
Some(("add", args)) => *self = Self::Add(AddArgs::from_arg_matches(args)?),
|
||||
Some(("remove", args)) => *self = Self::Remove(RemoveArgs::from_arg_matches(args)?),
|
||||
Some((_, _)) => {
|
||||
return Err(Error::raw(
|
||||
ErrorKind::InvalidSubcommand,
|
||||
"Valid subcommands are `add` and `remove`",
|
||||
))
|
||||
}
|
||||
None => (),
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Subcommand for CliSub {
|
||||
fn augment_subcommands(cmd: Command) -> Command {
|
||||
cmd.subcommand(AddArgs::augment_args(Command::new("add")))
|
||||
.subcommand(RemoveArgs::augment_args(Command::new("remove")))
|
||||
.subcommand_required(true)
|
||||
}
|
||||
fn augment_subcommands_for_update(cmd: Command) -> Command {
|
||||
cmd.subcommand(AddArgs::augment_args(Command::new("add")))
|
||||
.subcommand(RemoveArgs::augment_args(Command::new("remove")))
|
||||
.subcommand_required(true)
|
||||
}
|
||||
fn has_subcommand(name: &str) -> bool {
|
||||
matches!(name, "add" | "remove")
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
struct Cli {
|
||||
#[arg(short, long)]
|
||||
top_level: bool,
|
||||
#[command(subcommand)]
|
||||
subcommand: CliSub,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Cli::parse();
|
||||
println!("{args:#?}");
|
||||
}
|
248
vendor/clap/examples/derive_ref/interop_tests.md
vendored
Normal file
248
vendor/clap/examples/derive_ref/interop_tests.md
vendored
Normal file
@ -0,0 +1,248 @@
|
||||
Following are tests for the interop examples in this directory.
|
||||
|
||||
## Augment Args
|
||||
|
||||
```console
|
||||
$ interop_augment_args
|
||||
Value of built: false
|
||||
Value of derived via ArgMatches: false
|
||||
Value of derived: DerivedArgs {
|
||||
derived: false,
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_augment_args -b --derived
|
||||
Value of built: true
|
||||
Value of derived via ArgMatches: true
|
||||
Value of derived: DerivedArgs {
|
||||
derived: true,
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_augment_args -d --built
|
||||
Value of built: true
|
||||
Value of derived via ArgMatches: true
|
||||
Value of derived: DerivedArgs {
|
||||
derived: true,
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_augment_args --unknown
|
||||
? failed
|
||||
error: unexpected argument '--unknown' found
|
||||
|
||||
Usage: interop_augment_args[EXE] [OPTIONS]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
## Augment Subcommands
|
||||
|
||||
```console
|
||||
$ interop_augment_subcommands
|
||||
? failed
|
||||
error: A subcommand is required but one was not provided.
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_augment_subcommands derived
|
||||
Derived subcommands: Derived {
|
||||
derived_flag: false,
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_augment_subcommands derived --derived-flag
|
||||
Derived subcommands: Derived {
|
||||
derived_flag: true,
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_augment_subcommands derived --unknown
|
||||
? failed
|
||||
error: unexpected argument '--unknown' found
|
||||
|
||||
Usage: interop_augment_subcommands[EXE] derived [OPTIONS]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_augment_subcommands unknown
|
||||
? failed
|
||||
error: unrecognized subcommand 'unknown'
|
||||
|
||||
Usage: interop_augment_subcommands[EXE] [COMMAND]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
## Hand-Implemented Subcommand
|
||||
|
||||
```console
|
||||
$ interop_hand_subcommand
|
||||
? failed
|
||||
Usage: interop_hand_subcommand[EXE] [OPTIONS] <COMMAND>
|
||||
|
||||
Commands:
|
||||
add
|
||||
remove
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-t, --top-level
|
||||
-h, --help Print help
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_hand_subcommand add
|
||||
Cli {
|
||||
top_level: false,
|
||||
subcommand: Add(
|
||||
AddArgs {
|
||||
name: [],
|
||||
},
|
||||
),
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_hand_subcommand add a b c
|
||||
Cli {
|
||||
top_level: false,
|
||||
subcommand: Add(
|
||||
AddArgs {
|
||||
name: [
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
],
|
||||
},
|
||||
),
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_hand_subcommand add --unknown
|
||||
? failed
|
||||
error: unexpected argument '--unknown' found
|
||||
|
||||
tip: to pass '--unknown' as a value, use '-- --unknown'
|
||||
|
||||
Usage: interop_hand_subcommand[EXE] add [NAME]...
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_hand_subcommand remove
|
||||
Cli {
|
||||
top_level: false,
|
||||
subcommand: Remove(
|
||||
RemoveArgs {
|
||||
force: false,
|
||||
name: [],
|
||||
},
|
||||
),
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_hand_subcommand remove --force a b c
|
||||
Cli {
|
||||
top_level: false,
|
||||
subcommand: Remove(
|
||||
RemoveArgs {
|
||||
force: true,
|
||||
name: [
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
],
|
||||
},
|
||||
),
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_hand_subcommand unknown
|
||||
? failed
|
||||
error: unrecognized subcommand 'unknown'
|
||||
|
||||
Usage: interop_hand_subcommand[EXE] [OPTIONS] <COMMAND>
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
## Flatten Hand-Implemented Args
|
||||
|
||||
```console
|
||||
$ interop_flatten_hand_args
|
||||
Cli {
|
||||
top_level: false,
|
||||
more_args: CliArgs {
|
||||
foo: false,
|
||||
bar: false,
|
||||
quuz: None,
|
||||
},
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_flatten_hand_args -f --bar
|
||||
Cli {
|
||||
top_level: false,
|
||||
more_args: CliArgs {
|
||||
foo: true,
|
||||
bar: true,
|
||||
quuz: None,
|
||||
},
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_flatten_hand_args --quuz abc
|
||||
Cli {
|
||||
top_level: false,
|
||||
more_args: CliArgs {
|
||||
foo: false,
|
||||
bar: false,
|
||||
quuz: Some(
|
||||
"abc",
|
||||
),
|
||||
},
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```console
|
||||
$ interop_flatten_hand_args --unknown
|
||||
? failed
|
||||
error: unexpected argument '--unknown' found
|
||||
|
||||
Usage: interop_flatten_hand_args[EXE] [OPTIONS]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
60
vendor/clap/examples/escaped-positional-derive.md
vendored
Normal file
60
vendor/clap/examples/escaped-positional-derive.md
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
**This requires enabling the [`derive` feature flag][crate::_features].**
|
||||
|
||||
You can use `--` to escape further arguments.
|
||||
|
||||
Let's see what this looks like in the help:
|
||||
```console
|
||||
$ escaped-positional-derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: escaped-positional-derive[EXE] [OPTIONS] [-- <SLOP>...]
|
||||
|
||||
Arguments:
|
||||
[SLOP]...
|
||||
|
||||
Options:
|
||||
-f
|
||||
-p <PEAR>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
Here is a baseline without any arguments:
|
||||
```console
|
||||
$ escaped-positional-derive
|
||||
-f used: false
|
||||
-p's value: None
|
||||
'slops' values: []
|
||||
|
||||
```
|
||||
|
||||
Notice that we can't pass positional arguments before `--`:
|
||||
```console
|
||||
$ escaped-positional-derive foo bar
|
||||
? failed
|
||||
error: unexpected argument 'foo' found
|
||||
|
||||
Usage: escaped-positional-derive[EXE] [OPTIONS] [-- <SLOP>...]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
But you can after:
|
||||
```console
|
||||
$ escaped-positional-derive -f -p=bob -- sloppy slop slop
|
||||
-f used: true
|
||||
-p's value: Some("bob")
|
||||
'slops' values: ["sloppy", "slop", "slop"]
|
||||
|
||||
```
|
||||
|
||||
As mentioned, the parser will directly pass everything through:
|
||||
```console
|
||||
$ escaped-positional-derive -- -f -p=bob sloppy slop slop
|
||||
-f used: false
|
||||
-p's value: None
|
||||
'slops' values: ["-f", "-p=bob", "sloppy", "slop", "slop"]
|
||||
|
||||
```
|
25
vendor/clap/examples/escaped-positional-derive.rs
vendored
Normal file
25
vendor/clap/examples/escaped-positional-derive.rs
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)] // requires `derive` feature
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(short = 'f')]
|
||||
eff: bool,
|
||||
|
||||
#[arg(short = 'p', value_name = "PEAR")]
|
||||
pea: Option<String>,
|
||||
|
||||
#[arg(last = true)]
|
||||
slop: Vec<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Cli::parse();
|
||||
|
||||
// This is what will happen with `myprog -f -p=bob -- sloppy slop slop`...
|
||||
println!("-f used: {:?}", args.eff); // -f used: true
|
||||
println!("-p's value: {:?}", args.pea); // -p's value: Some("bob")
|
||||
println!("'slops' values: {:?}", args.slop); // 'slops' values: Some(["sloppy", "slop", "slop"])
|
||||
|
||||
// Continued program logic goes here...
|
||||
}
|
60
vendor/clap/examples/escaped-positional.md
vendored
Normal file
60
vendor/clap/examples/escaped-positional.md
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
**This requires enabling the [`cargo` feature flag][crate::_features].**
|
||||
|
||||
You can use `--` to escape further arguments.
|
||||
|
||||
Let's see what this looks like in the help:
|
||||
```console
|
||||
$ escaped-positional --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: escaped-positional[EXE] [OPTIONS] [-- <SLOP>...]
|
||||
|
||||
Arguments:
|
||||
[SLOP]...
|
||||
|
||||
Options:
|
||||
-f
|
||||
-p <PEAR>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
Here is a baseline without any arguments:
|
||||
```console
|
||||
$ escaped-positional
|
||||
-f used: false
|
||||
-p's value: None
|
||||
'slops' values: []
|
||||
|
||||
```
|
||||
|
||||
Notice that we can't pass positional arguments before `--`:
|
||||
```console
|
||||
$ escaped-positional foo bar
|
||||
? failed
|
||||
error: unexpected argument 'foo' found
|
||||
|
||||
Usage: escaped-positional[EXE] [OPTIONS] [-- <SLOP>...]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
But you can after:
|
||||
```console
|
||||
$ escaped-positional -f -p=bob -- sloppy slop slop
|
||||
-f used: true
|
||||
-p's value: Some("bob")
|
||||
'slops' values: ["sloppy", "slop", "slop"]
|
||||
|
||||
```
|
||||
|
||||
As mentioned, the parser will directly pass everything through:
|
||||
```console
|
||||
$ escaped-positional -- -f -p=bob sloppy slop slop
|
||||
-f used: false
|
||||
-p's value: None
|
||||
'slops' values: ["-f", "-p=bob", "sloppy", "slop", "slop"]
|
||||
|
||||
```
|
32
vendor/clap/examples/escaped-positional.rs
vendored
Normal file
32
vendor/clap/examples/escaped-positional.rs
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
use clap::{arg, command, value_parser, ArgAction};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(arg!(eff: -f).action(ArgAction::SetTrue))
|
||||
.arg(arg!(pea: -p <PEAR>).value_parser(value_parser!(String)))
|
||||
.arg(
|
||||
// Indicates that `slop` is only accessible after `--`.
|
||||
arg!(slop: [SLOP])
|
||||
.num_args(1..)
|
||||
.last(true)
|
||||
.value_parser(value_parser!(String)),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
// This is what will happen with `myprog -f -p=bob -- sloppy slop slop`...
|
||||
|
||||
// -f used: true
|
||||
println!("-f used: {:?}", matches.get_flag("eff"));
|
||||
// -p's value: Some("bob")
|
||||
println!("-p's value: {:?}", matches.get_one::<String>("pea"));
|
||||
// 'slops' values: Some(["sloppy", "slop", "slop"])
|
||||
println!(
|
||||
"'slops' values: {:?}",
|
||||
matches
|
||||
.get_many::<String>("slop")
|
||||
.map(|vals| vals.collect::<Vec<_>>())
|
||||
.unwrap_or_default()
|
||||
);
|
||||
|
||||
// Continued program logic goes here...
|
||||
}
|
45
vendor/clap/examples/find.md
vendored
Normal file
45
vendor/clap/examples/find.md
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
`find` is an example of position-sensitive flags
|
||||
|
||||
```console
|
||||
$ find --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: find[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
TESTS:
|
||||
--empty File is empty and is either a regular file or a directory
|
||||
--name <NAME> Base of file name (the path with the leading directories removed) matches shell
|
||||
pattern pattern
|
||||
|
||||
OPERATORS:
|
||||
-o, --or expr2 is not evaluate if exp1 is true
|
||||
-a, --and Same as `expr1 expr1`
|
||||
|
||||
$ find --empty -o --name .keep
|
||||
[
|
||||
(
|
||||
"empty",
|
||||
Bool(
|
||||
true,
|
||||
),
|
||||
),
|
||||
(
|
||||
"or",
|
||||
Bool(
|
||||
true,
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
String(
|
||||
".keep",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
||||
```
|
||||
|
99
vendor/clap/examples/find.rs
vendored
Normal file
99
vendor/clap/examples/find.rs
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use clap::{arg, command, ArgGroup, ArgMatches, Command};
|
||||
|
||||
fn main() {
|
||||
let matches = cli().get_matches();
|
||||
let values = Value::from_matches(&matches);
|
||||
println!("{values:#?}");
|
||||
}
|
||||
|
||||
fn cli() -> Command {
|
||||
command!()
|
||||
.group(ArgGroup::new("tests").multiple(true))
|
||||
.next_help_heading("TESTS")
|
||||
.args([
|
||||
arg!(--empty "File is empty and is either a regular file or a directory").group("tests"),
|
||||
arg!(--name <NAME> "Base of file name (the path with the leading directories removed) matches shell pattern pattern").group("tests"),
|
||||
])
|
||||
.group(ArgGroup::new("operators").multiple(true))
|
||||
.next_help_heading("OPERATORS")
|
||||
.args([
|
||||
arg!(-o - -or "expr2 is not evaluate if exp1 is true").group("operators"),
|
||||
arg!(-a - -and "Same as `expr1 expr1`").group("operators"),
|
||||
])
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
|
||||
pub enum Value {
|
||||
Bool(bool),
|
||||
String(String),
|
||||
}
|
||||
|
||||
impl Value {
|
||||
pub fn from_matches(matches: &ArgMatches) -> Vec<(clap::Id, Self)> {
|
||||
let mut values = BTreeMap::new();
|
||||
for id in matches.ids() {
|
||||
if matches.try_get_many::<clap::Id>(id.as_str()).is_ok() {
|
||||
// ignore groups
|
||||
continue;
|
||||
}
|
||||
let value_source = matches
|
||||
.value_source(id.as_str())
|
||||
.expect("id came from matches");
|
||||
if value_source != clap::parser::ValueSource::CommandLine {
|
||||
// Any other source just gets tacked on at the end (like default values)
|
||||
continue;
|
||||
}
|
||||
if Self::extract::<String>(matches, id, &mut values) {
|
||||
continue;
|
||||
}
|
||||
if Self::extract::<bool>(matches, id, &mut values) {
|
||||
continue;
|
||||
}
|
||||
unimplemented!("unknown type for {id}: {matches:?}");
|
||||
}
|
||||
values.into_values().collect::<Vec<_>>()
|
||||
}
|
||||
|
||||
fn extract<T: Clone + Into<Value> + Send + Sync + 'static>(
|
||||
matches: &ArgMatches,
|
||||
id: &clap::Id,
|
||||
output: &mut BTreeMap<usize, (clap::Id, Self)>,
|
||||
) -> bool {
|
||||
match matches.try_get_many::<T>(id.as_str()) {
|
||||
Ok(Some(values)) => {
|
||||
for (value, index) in values.zip(
|
||||
matches
|
||||
.indices_of(id.as_str())
|
||||
.expect("id came from matches"),
|
||||
) {
|
||||
output.insert(index, (id.clone(), value.clone().into()));
|
||||
}
|
||||
true
|
||||
}
|
||||
Ok(None) => {
|
||||
unreachable!("`ids` only reports what is present")
|
||||
}
|
||||
Err(clap::parser::MatchesError::UnknownArgument { .. }) => {
|
||||
unreachable!("id came from matches")
|
||||
}
|
||||
Err(clap::parser::MatchesError::Downcast { .. }) => false,
|
||||
Err(_) => {
|
||||
unreachable!("id came from matches")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<String> for Value {
|
||||
fn from(other: String) -> Self {
|
||||
Self::String(other)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<bool> for Value {
|
||||
fn from(other: bool) -> Self {
|
||||
Self::Bool(other)
|
||||
}
|
||||
}
|
172
vendor/clap/examples/git-derive.md
vendored
Normal file
172
vendor/clap/examples/git-derive.md
vendored
Normal file
@ -0,0 +1,172 @@
|
||||
**This requires enabling the [`derive` feature flag][crate::_features].**
|
||||
|
||||
Git is an example of several common subcommand patterns.
|
||||
|
||||
Help:
|
||||
```console
|
||||
$ git-derive
|
||||
? failed
|
||||
A fictional versioning CLI
|
||||
|
||||
Usage: git-derive[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
clone Clones repos
|
||||
diff Compare two commits
|
||||
push pushes things
|
||||
add adds things
|
||||
stash
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git-derive help
|
||||
A fictional versioning CLI
|
||||
|
||||
Usage: git-derive[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
clone Clones repos
|
||||
diff Compare two commits
|
||||
push pushes things
|
||||
add adds things
|
||||
stash
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git-derive help add
|
||||
adds things
|
||||
|
||||
Usage: git-derive[EXE] add <PATH>...
|
||||
|
||||
Arguments:
|
||||
<PATH>... Stuff to add
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
```
|
||||
|
||||
A basic argument:
|
||||
```console
|
||||
$ git-derive add
|
||||
? failed
|
||||
adds things
|
||||
|
||||
Usage: git-derive[EXE] add <PATH>...
|
||||
|
||||
Arguments:
|
||||
<PATH>... Stuff to add
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git-derive add Cargo.toml Cargo.lock
|
||||
Adding ["Cargo.toml", "Cargo.lock"]
|
||||
|
||||
```
|
||||
|
||||
Default subcommand:
|
||||
```console
|
||||
$ git-derive stash -h
|
||||
Usage: git-derive[EXE] stash [OPTIONS]
|
||||
git-derive[EXE] stash push [OPTIONS]
|
||||
git-derive[EXE] stash pop [STASH]
|
||||
git-derive[EXE] stash apply [STASH]
|
||||
git-derive[EXE] stash help [COMMAND]...
|
||||
|
||||
Options:
|
||||
-m, --message <MESSAGE>
|
||||
-h, --help Print help
|
||||
|
||||
git-derive[EXE] stash push:
|
||||
-m, --message <MESSAGE>
|
||||
-h, --help Print help
|
||||
|
||||
git-derive[EXE] stash pop:
|
||||
-h, --help Print help
|
||||
[STASH]
|
||||
|
||||
git-derive[EXE] stash apply:
|
||||
-h, --help Print help
|
||||
[STASH]
|
||||
|
||||
git-derive[EXE] stash help:
|
||||
Print this message or the help of the given subcommand(s)
|
||||
[COMMAND]... Print help for the subcommand(s)
|
||||
|
||||
$ git-derive stash push -h
|
||||
Usage: git-derive[EXE] stash push [OPTIONS]
|
||||
|
||||
Options:
|
||||
-m, --message <MESSAGE>
|
||||
-h, --help Print help
|
||||
|
||||
$ git-derive stash pop -h
|
||||
Usage: git-derive[EXE] stash pop [STASH]
|
||||
|
||||
Arguments:
|
||||
[STASH]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git-derive stash -m "Prototype"
|
||||
Pushing StashPushArgs { message: Some("Prototype") }
|
||||
|
||||
$ git-derive stash pop
|
||||
Popping None
|
||||
|
||||
$ git-derive stash push -m "Prototype"
|
||||
Pushing StashPushArgs { message: Some("Prototype") }
|
||||
|
||||
$ git-derive stash pop
|
||||
Popping None
|
||||
|
||||
```
|
||||
|
||||
External subcommands:
|
||||
```console
|
||||
$ git-derive custom-tool arg1 --foo bar
|
||||
Calling out to "custom-tool" with ["arg1", "--foo", "bar"]
|
||||
|
||||
```
|
||||
|
||||
Last argument:
|
||||
```console
|
||||
$ git-derive diff --help
|
||||
Compare two commits
|
||||
|
||||
Usage: git-derive[EXE] diff [OPTIONS] [COMMIT] [COMMIT] [-- <PATH>]
|
||||
|
||||
Arguments:
|
||||
[COMMIT]
|
||||
[COMMIT]
|
||||
[PATH]
|
||||
|
||||
Options:
|
||||
--color[=<WHEN>] [default: auto] [possible values: always, auto, never]
|
||||
-h, --help Print help
|
||||
|
||||
$ git-derive diff
|
||||
Diffing stage..worktree (color=auto)
|
||||
|
||||
$ git-derive diff ./src
|
||||
Diffing stage..worktree ./src (color=auto)
|
||||
|
||||
$ git-derive diff HEAD ./src
|
||||
Diffing HEAD..worktree ./src (color=auto)
|
||||
|
||||
$ git-derive diff HEAD~~ -- HEAD
|
||||
Diffing HEAD~~..worktree HEAD (color=auto)
|
||||
|
||||
$ git-derive diff --color
|
||||
Diffing stage..worktree (color=always)
|
||||
|
||||
$ git-derive diff --color=never
|
||||
Diffing stage..worktree (color=never)
|
||||
|
||||
```
|
165
vendor/clap/examples/git-derive.rs
vendored
Normal file
165
vendor/clap/examples/git-derive.rs
vendored
Normal file
@ -0,0 +1,165 @@
|
||||
use std::ffi::OsStr;
|
||||
use std::ffi::OsString;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::{Args, Parser, Subcommand, ValueEnum};
|
||||
|
||||
/// A fictional versioning CLI
|
||||
#[derive(Debug, Parser)] // requires `derive` feature
|
||||
#[command(name = "git")]
|
||||
#[command(about = "A fictional versioning CLI", long_about = None)]
|
||||
struct Cli {
|
||||
#[command(subcommand)]
|
||||
command: Commands,
|
||||
}
|
||||
|
||||
#[derive(Debug, Subcommand)]
|
||||
enum Commands {
|
||||
/// Clones repos
|
||||
#[command(arg_required_else_help = true)]
|
||||
Clone {
|
||||
/// The remote to clone
|
||||
remote: String,
|
||||
},
|
||||
/// Compare two commits
|
||||
Diff {
|
||||
#[arg(value_name = "COMMIT")]
|
||||
base: Option<OsString>,
|
||||
#[arg(value_name = "COMMIT")]
|
||||
head: Option<OsString>,
|
||||
#[arg(last = true)]
|
||||
path: Option<OsString>,
|
||||
#[arg(
|
||||
long,
|
||||
require_equals = true,
|
||||
value_name = "WHEN",
|
||||
num_args = 0..=1,
|
||||
default_value_t = ColorWhen::Auto,
|
||||
default_missing_value = "always",
|
||||
value_enum
|
||||
)]
|
||||
color: ColorWhen,
|
||||
},
|
||||
/// pushes things
|
||||
#[command(arg_required_else_help = true)]
|
||||
Push {
|
||||
/// The remote to target
|
||||
remote: String,
|
||||
},
|
||||
/// adds things
|
||||
#[command(arg_required_else_help = true)]
|
||||
Add {
|
||||
/// Stuff to add
|
||||
#[arg(required = true)]
|
||||
path: Vec<PathBuf>,
|
||||
},
|
||||
Stash(StashArgs),
|
||||
#[command(external_subcommand)]
|
||||
External(Vec<OsString>),
|
||||
}
|
||||
|
||||
#[derive(ValueEnum, Copy, Clone, Debug, PartialEq, Eq)]
|
||||
enum ColorWhen {
|
||||
Always,
|
||||
Auto,
|
||||
Never,
|
||||
}
|
||||
|
||||
impl std::fmt::Display for ColorWhen {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
self.to_possible_value()
|
||||
.expect("no values are skipped")
|
||||
.get_name()
|
||||
.fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
#[command(args_conflicts_with_subcommands = true)]
|
||||
#[command(flatten_help = true)]
|
||||
struct StashArgs {
|
||||
#[command(subcommand)]
|
||||
command: Option<StashCommands>,
|
||||
|
||||
#[command(flatten)]
|
||||
push: StashPushArgs,
|
||||
}
|
||||
|
||||
#[derive(Debug, Subcommand)]
|
||||
enum StashCommands {
|
||||
Push(StashPushArgs),
|
||||
Pop { stash: Option<String> },
|
||||
Apply { stash: Option<String> },
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
struct StashPushArgs {
|
||||
#[arg(short, long)]
|
||||
message: Option<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Cli::parse();
|
||||
|
||||
match args.command {
|
||||
Commands::Clone { remote } => {
|
||||
println!("Cloning {remote}");
|
||||
}
|
||||
Commands::Diff {
|
||||
mut base,
|
||||
mut head,
|
||||
mut path,
|
||||
color,
|
||||
} => {
|
||||
if path.is_none() {
|
||||
path = head;
|
||||
head = None;
|
||||
if path.is_none() {
|
||||
path = base;
|
||||
base = None;
|
||||
}
|
||||
}
|
||||
let base = base
|
||||
.as_deref()
|
||||
.map(|s| s.to_str().unwrap())
|
||||
.unwrap_or("stage");
|
||||
let head = head
|
||||
.as_deref()
|
||||
.map(|s| s.to_str().unwrap())
|
||||
.unwrap_or("worktree");
|
||||
let path = path.as_deref().unwrap_or_else(|| OsStr::new(""));
|
||||
println!(
|
||||
"Diffing {}..{} {} (color={})",
|
||||
base,
|
||||
head,
|
||||
path.to_string_lossy(),
|
||||
color
|
||||
);
|
||||
}
|
||||
Commands::Push { remote } => {
|
||||
println!("Pushing to {remote}");
|
||||
}
|
||||
Commands::Add { path } => {
|
||||
println!("Adding {path:?}");
|
||||
}
|
||||
Commands::Stash(stash) => {
|
||||
let stash_cmd = stash.command.unwrap_or(StashCommands::Push(stash.push));
|
||||
match stash_cmd {
|
||||
StashCommands::Push(push) => {
|
||||
println!("Pushing {push:?}");
|
||||
}
|
||||
StashCommands::Pop { stash } => {
|
||||
println!("Popping {stash:?}");
|
||||
}
|
||||
StashCommands::Apply { stash } => {
|
||||
println!("Applying {stash:?}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Commands::External(args) => {
|
||||
println!("Calling out to {:?} with {:?}", &args[0], &args[1..]);
|
||||
}
|
||||
}
|
||||
|
||||
// Continued program logic goes here...
|
||||
}
|
170
vendor/clap/examples/git.md
vendored
Normal file
170
vendor/clap/examples/git.md
vendored
Normal file
@ -0,0 +1,170 @@
|
||||
Git is an example of several common subcommand patterns.
|
||||
|
||||
Help:
|
||||
```console
|
||||
$ git
|
||||
? failed
|
||||
A fictional versioning CLI
|
||||
|
||||
Usage: git[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
clone Clones repos
|
||||
diff Compare two commits
|
||||
push pushes things
|
||||
add adds things
|
||||
stash
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git help
|
||||
A fictional versioning CLI
|
||||
|
||||
Usage: git[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
clone Clones repos
|
||||
diff Compare two commits
|
||||
push pushes things
|
||||
add adds things
|
||||
stash
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git help add
|
||||
adds things
|
||||
|
||||
Usage: git[EXE] add <PATH>...
|
||||
|
||||
Arguments:
|
||||
<PATH>... Stuff to add
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
```
|
||||
|
||||
A basic argument:
|
||||
```console
|
||||
$ git add
|
||||
? failed
|
||||
adds things
|
||||
|
||||
Usage: git[EXE] add <PATH>...
|
||||
|
||||
Arguments:
|
||||
<PATH>... Stuff to add
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git add Cargo.toml Cargo.lock
|
||||
Adding ["Cargo.toml", "Cargo.lock"]
|
||||
|
||||
```
|
||||
|
||||
Default subcommand:
|
||||
```console
|
||||
$ git stash -h
|
||||
Usage: git[EXE] stash [OPTIONS]
|
||||
git[EXE] stash push [OPTIONS]
|
||||
git[EXE] stash pop [STASH]
|
||||
git[EXE] stash apply [STASH]
|
||||
git[EXE] stash help [COMMAND]...
|
||||
|
||||
Options:
|
||||
-m, --message <MESSAGE>
|
||||
-h, --help Print help
|
||||
|
||||
git[EXE] stash push:
|
||||
-m, --message <MESSAGE>
|
||||
-h, --help Print help
|
||||
|
||||
git[EXE] stash pop:
|
||||
-h, --help Print help
|
||||
[STASH]
|
||||
|
||||
git[EXE] stash apply:
|
||||
-h, --help Print help
|
||||
[STASH]
|
||||
|
||||
git[EXE] stash help:
|
||||
Print this message or the help of the given subcommand(s)
|
||||
[COMMAND]... Print help for the subcommand(s)
|
||||
|
||||
$ git stash push -h
|
||||
Usage: git[EXE] stash push [OPTIONS]
|
||||
|
||||
Options:
|
||||
-m, --message <MESSAGE>
|
||||
-h, --help Print help
|
||||
|
||||
$ git stash pop -h
|
||||
Usage: git[EXE] stash pop [STASH]
|
||||
|
||||
Arguments:
|
||||
[STASH]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
|
||||
$ git stash -m "Prototype"
|
||||
Pushing Some("Prototype")
|
||||
|
||||
$ git stash pop
|
||||
Popping None
|
||||
|
||||
$ git stash push -m "Prototype"
|
||||
Pushing Some("Prototype")
|
||||
|
||||
$ git stash pop
|
||||
Popping None
|
||||
|
||||
```
|
||||
|
||||
External subcommands:
|
||||
```console
|
||||
$ git custom-tool arg1 --foo bar
|
||||
Calling out to "custom-tool" with ["arg1", "--foo", "bar"]
|
||||
|
||||
```
|
||||
|
||||
Last argument:
|
||||
```console
|
||||
$ git diff --help
|
||||
Compare two commits
|
||||
|
||||
Usage: git[EXE] diff [OPTIONS] [COMMIT] [COMMIT] [-- <PATH>]
|
||||
|
||||
Arguments:
|
||||
[COMMIT]
|
||||
[COMMIT]
|
||||
[PATH]
|
||||
|
||||
Options:
|
||||
--color[=<WHEN>] [default: auto] [possible values: always, auto, never]
|
||||
-h, --help Print help
|
||||
|
||||
$ git diff
|
||||
Diffing stage..worktree (color=auto)
|
||||
|
||||
$ git diff ./src
|
||||
Diffing stage..worktree ./src (color=auto)
|
||||
|
||||
$ git diff HEAD ./src
|
||||
Diffing HEAD..worktree ./src (color=auto)
|
||||
|
||||
$ git diff HEAD~~ -- HEAD
|
||||
Diffing HEAD~~..worktree HEAD (color=auto)
|
||||
|
||||
$ git diff --color
|
||||
Diffing stage..worktree (color=always)
|
||||
|
||||
$ git diff --color=never
|
||||
Diffing stage..worktree (color=never)
|
||||
|
||||
```
|
138
vendor/clap/examples/git.rs
vendored
Normal file
138
vendor/clap/examples/git.rs
vendored
Normal file
@ -0,0 +1,138 @@
|
||||
use std::ffi::OsString;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::{arg, Command};
|
||||
|
||||
fn cli() -> Command {
|
||||
Command::new("git")
|
||||
.about("A fictional versioning CLI")
|
||||
.subcommand_required(true)
|
||||
.arg_required_else_help(true)
|
||||
.allow_external_subcommands(true)
|
||||
.subcommand(
|
||||
Command::new("clone")
|
||||
.about("Clones repos")
|
||||
.arg(arg!(<REMOTE> "The remote to clone"))
|
||||
.arg_required_else_help(true),
|
||||
)
|
||||
.subcommand(
|
||||
Command::new("diff")
|
||||
.about("Compare two commits")
|
||||
.arg(arg!(base: [COMMIT]))
|
||||
.arg(arg!(head: [COMMIT]))
|
||||
.arg(arg!(path: [PATH]).last(true))
|
||||
.arg(
|
||||
arg!(--color <WHEN>)
|
||||
.value_parser(["always", "auto", "never"])
|
||||
.num_args(0..=1)
|
||||
.require_equals(true)
|
||||
.default_value("auto")
|
||||
.default_missing_value("always"),
|
||||
),
|
||||
)
|
||||
.subcommand(
|
||||
Command::new("push")
|
||||
.about("pushes things")
|
||||
.arg(arg!(<REMOTE> "The remote to target"))
|
||||
.arg_required_else_help(true),
|
||||
)
|
||||
.subcommand(
|
||||
Command::new("add")
|
||||
.about("adds things")
|
||||
.arg_required_else_help(true)
|
||||
.arg(arg!(<PATH> ... "Stuff to add").value_parser(clap::value_parser!(PathBuf))),
|
||||
)
|
||||
.subcommand(
|
||||
Command::new("stash")
|
||||
.args_conflicts_with_subcommands(true)
|
||||
.flatten_help(true)
|
||||
.args(push_args())
|
||||
.subcommand(Command::new("push").args(push_args()))
|
||||
.subcommand(Command::new("pop").arg(arg!([STASH])))
|
||||
.subcommand(Command::new("apply").arg(arg!([STASH]))),
|
||||
)
|
||||
}
|
||||
|
||||
fn push_args() -> Vec<clap::Arg> {
|
||||
vec![arg!(-m --message <MESSAGE>)]
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let matches = cli().get_matches();
|
||||
|
||||
match matches.subcommand() {
|
||||
Some(("clone", sub_matches)) => {
|
||||
println!(
|
||||
"Cloning {}",
|
||||
sub_matches.get_one::<String>("REMOTE").expect("required")
|
||||
);
|
||||
}
|
||||
Some(("diff", sub_matches)) => {
|
||||
let color = sub_matches
|
||||
.get_one::<String>("color")
|
||||
.map(|s| s.as_str())
|
||||
.expect("defaulted in clap");
|
||||
|
||||
let mut base = sub_matches.get_one::<String>("base").map(|s| s.as_str());
|
||||
let mut head = sub_matches.get_one::<String>("head").map(|s| s.as_str());
|
||||
let mut path = sub_matches.get_one::<String>("path").map(|s| s.as_str());
|
||||
if path.is_none() {
|
||||
path = head;
|
||||
head = None;
|
||||
if path.is_none() {
|
||||
path = base;
|
||||
base = None;
|
||||
}
|
||||
}
|
||||
let base = base.unwrap_or("stage");
|
||||
let head = head.unwrap_or("worktree");
|
||||
let path = path.unwrap_or("");
|
||||
println!("Diffing {base}..{head} {path} (color={color})");
|
||||
}
|
||||
Some(("push", sub_matches)) => {
|
||||
println!(
|
||||
"Pushing to {}",
|
||||
sub_matches.get_one::<String>("REMOTE").expect("required")
|
||||
);
|
||||
}
|
||||
Some(("add", sub_matches)) => {
|
||||
let paths = sub_matches
|
||||
.get_many::<PathBuf>("PATH")
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.collect::<Vec<_>>();
|
||||
println!("Adding {paths:?}");
|
||||
}
|
||||
Some(("stash", sub_matches)) => {
|
||||
let stash_command = sub_matches.subcommand().unwrap_or(("push", sub_matches));
|
||||
match stash_command {
|
||||
("apply", sub_matches) => {
|
||||
let stash = sub_matches.get_one::<String>("STASH");
|
||||
println!("Applying {stash:?}");
|
||||
}
|
||||
("pop", sub_matches) => {
|
||||
let stash = sub_matches.get_one::<String>("STASH");
|
||||
println!("Popping {stash:?}");
|
||||
}
|
||||
("push", sub_matches) => {
|
||||
let message = sub_matches.get_one::<String>("message");
|
||||
println!("Pushing {message:?}");
|
||||
}
|
||||
(name, _) => {
|
||||
unreachable!("Unsupported subcommand `{name}`")
|
||||
}
|
||||
}
|
||||
}
|
||||
Some((ext, sub_matches)) => {
|
||||
let args = sub_matches
|
||||
.get_many::<OsString>("")
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.collect::<Vec<_>>();
|
||||
println!("Calling out to {ext:?} with {args:?}");
|
||||
}
|
||||
_ => unreachable!(), // If all subcommands are defined above, anything else is unreachable!()
|
||||
}
|
||||
|
||||
// Continued program logic goes here...
|
||||
}
|
39
vendor/clap/examples/multicall-busybox.md
vendored
Normal file
39
vendor/clap/examples/multicall-busybox.md
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
See the documentation for [`Command::multicall`][crate::Command::multicall] for rationale.
|
||||
|
||||
This example omits every command except true and false,
|
||||
which are the most trivial to implement,
|
||||
```console
|
||||
$ busybox true
|
||||
? 0
|
||||
|
||||
$ busybox false
|
||||
? 1
|
||||
|
||||
```
|
||||
*Note: without the links setup, we can't demonstrate the multicall behavior*
|
||||
|
||||
But includes the `--install` option as an example of why it can be useful
|
||||
for the main program to take arguments that aren't applet subcommands.
|
||||
```console
|
||||
$ busybox --install
|
||||
? failed
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
Though users must pass something:
|
||||
```console
|
||||
$ busybox
|
||||
? failed
|
||||
Usage: busybox [OPTIONS] [APPLET]
|
||||
|
||||
APPLETS:
|
||||
true does nothing successfully
|
||||
false does nothing unsuccessfully
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
--install <install> Install hardlinks for all subcommands in path
|
||||
-h, --help Print help
|
||||
|
||||
```
|
47
vendor/clap/examples/multicall-busybox.rs
vendored
Normal file
47
vendor/clap/examples/multicall-busybox.rs
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
use std::path::PathBuf;
|
||||
use std::process::exit;
|
||||
|
||||
use clap::{value_parser, Arg, ArgAction, Command};
|
||||
|
||||
fn applet_commands() -> [Command; 2] {
|
||||
[
|
||||
Command::new("true").about("does nothing successfully"),
|
||||
Command::new("false").about("does nothing unsuccessfully"),
|
||||
]
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cmd = Command::new(env!("CARGO_CRATE_NAME"))
|
||||
.multicall(true)
|
||||
.subcommand(
|
||||
Command::new("busybox")
|
||||
.arg_required_else_help(true)
|
||||
.subcommand_value_name("APPLET")
|
||||
.subcommand_help_heading("APPLETS")
|
||||
.arg(
|
||||
Arg::new("install")
|
||||
.long("install")
|
||||
.help("Install hardlinks for all subcommands in path")
|
||||
.exclusive(true)
|
||||
.action(ArgAction::Set)
|
||||
.default_missing_value("/usr/local/bin")
|
||||
.value_parser(value_parser!(PathBuf)),
|
||||
)
|
||||
.subcommands(applet_commands()),
|
||||
)
|
||||
.subcommands(applet_commands());
|
||||
|
||||
let matches = cmd.get_matches();
|
||||
let mut subcommand = matches.subcommand();
|
||||
if let Some(("busybox", cmd)) = subcommand {
|
||||
if cmd.contains_id("install") {
|
||||
unimplemented!("Make hardlinks to the executable here");
|
||||
}
|
||||
subcommand = cmd.subcommand();
|
||||
}
|
||||
match subcommand {
|
||||
Some(("false", _)) => exit(1),
|
||||
Some(("true", _)) => exit(0),
|
||||
_ => unreachable!("parser should ensure only valid subcommand names are used"),
|
||||
}
|
||||
}
|
10
vendor/clap/examples/multicall-hostname.md
vendored
Normal file
10
vendor/clap/examples/multicall-hostname.md
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
See the documentation for [`Command::multicall`][crate::Command::multicall] for rationale.
|
||||
|
||||
This example omits the implementation of displaying address config
|
||||
|
||||
```console
|
||||
$ hostname
|
||||
www
|
||||
|
||||
```
|
||||
*Note: without the links setup, we can't demonstrate the multicall behavior*
|
17
vendor/clap/examples/multicall-hostname.rs
vendored
Normal file
17
vendor/clap/examples/multicall-hostname.rs
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
use clap::Command;
|
||||
|
||||
fn main() {
|
||||
let cmd = Command::new(env!("CARGO_CRATE_NAME"))
|
||||
.multicall(true)
|
||||
.arg_required_else_help(true)
|
||||
.subcommand_value_name("APPLET")
|
||||
.subcommand_help_heading("APPLETS")
|
||||
.subcommand(Command::new("hostname").about("show hostname part of FQDN"))
|
||||
.subcommand(Command::new("dnsdomainname").about("show domain name part of FQDN"));
|
||||
|
||||
match cmd.get_matches().subcommand_name() {
|
||||
Some("hostname") => println!("www"),
|
||||
Some("dnsdomainname") => println!("example.com"),
|
||||
_ => unreachable!("parser should ensure only valid subcommand names are used"),
|
||||
}
|
||||
}
|
79
vendor/clap/examples/pacman.md
vendored
Normal file
79
vendor/clap/examples/pacman.md
vendored
Normal file
@ -0,0 +1,79 @@
|
||||
[`pacman`](https://wiki.archlinux.org/index.php/pacman) defines subcommands via flags.
|
||||
|
||||
Here, `-S` is a short flag subcommand:
|
||||
```console
|
||||
$ pacman -S package
|
||||
Installing package...
|
||||
|
||||
```
|
||||
|
||||
Here `--sync` is a long flag subcommand:
|
||||
```console
|
||||
$ pacman --sync package
|
||||
Installing package...
|
||||
|
||||
```
|
||||
|
||||
Now the short flag subcommand (`-S`) with a long flag:
|
||||
```console
|
||||
$ pacman -S --search name
|
||||
Searching for name...
|
||||
|
||||
```
|
||||
|
||||
And the various forms of short flags that work:
|
||||
```console
|
||||
$ pacman -S -s name
|
||||
Searching for name...
|
||||
|
||||
$ pacman -Ss name
|
||||
Searching for name...
|
||||
|
||||
```
|
||||
*(users can "stack" short subcommands with short flags or with other short flag subcommands)*
|
||||
|
||||
In the help, this looks like:
|
||||
```console
|
||||
$ pacman -h
|
||||
package manager utility
|
||||
|
||||
Usage: pacman[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
query, -Q, --query Query the package database.
|
||||
sync, -S, --sync Synchronize packages.
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ pacman -S -h
|
||||
Synchronize packages.
|
||||
|
||||
Usage: pacman[EXE] {sync|--sync|-S} [OPTIONS] [package]...
|
||||
|
||||
Arguments:
|
||||
[package]... packages
|
||||
|
||||
Options:
|
||||
-s, --search <search>... search remote repositories for matching strings
|
||||
-i, --info view package information
|
||||
-h, --help Print help
|
||||
|
||||
```
|
||||
|
||||
And errors:
|
||||
```console
|
||||
$ pacman -S -s foo -i bar
|
||||
? failed
|
||||
error: the argument '--search <search>...' cannot be used with '--info'
|
||||
|
||||
Usage: pacman[EXE] {sync|--sync|-S} --search <search>... <package>...
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
||||
|
||||
**NOTE:** Keep in mind that subcommands, flags, and long flags are *case sensitive*: `-Q` and `-q` are different flags/subcommands. For example, you can have both `-Q` subcommand and `-q` flag, and they will be properly disambiguated.
|
||||
Let's make a quick program to illustrate.
|
111
vendor/clap/examples/pacman.rs
vendored
Normal file
111
vendor/clap/examples/pacman.rs
vendored
Normal file
@ -0,0 +1,111 @@
|
||||
use clap::{Arg, ArgAction, Command};
|
||||
|
||||
fn main() {
|
||||
let matches = Command::new("pacman")
|
||||
.about("package manager utility")
|
||||
.version("5.2.1")
|
||||
.subcommand_required(true)
|
||||
.arg_required_else_help(true)
|
||||
.author("Pacman Development Team")
|
||||
// Query subcommand
|
||||
//
|
||||
// Only a few of its arguments are implemented below.
|
||||
.subcommand(
|
||||
Command::new("query")
|
||||
.short_flag('Q')
|
||||
.long_flag("query")
|
||||
.about("Query the package database.")
|
||||
.arg(
|
||||
Arg::new("search")
|
||||
.short('s')
|
||||
.long("search")
|
||||
.help("search locally installed packages for matching strings")
|
||||
.conflicts_with("info")
|
||||
.action(ArgAction::Set)
|
||||
.num_args(1..),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("info")
|
||||
.long("info")
|
||||
.short('i')
|
||||
.conflicts_with("search")
|
||||
.help("view package information")
|
||||
.action(ArgAction::Set)
|
||||
.num_args(1..),
|
||||
),
|
||||
)
|
||||
// Sync subcommand
|
||||
//
|
||||
// Only a few of its arguments are implemented below.
|
||||
.subcommand(
|
||||
Command::new("sync")
|
||||
.short_flag('S')
|
||||
.long_flag("sync")
|
||||
.about("Synchronize packages.")
|
||||
.arg(
|
||||
Arg::new("search")
|
||||
.short('s')
|
||||
.long("search")
|
||||
.conflicts_with("info")
|
||||
.action(ArgAction::Set)
|
||||
.num_args(1..)
|
||||
.help("search remote repositories for matching strings"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("info")
|
||||
.long("info")
|
||||
.conflicts_with("search")
|
||||
.short('i')
|
||||
.action(ArgAction::SetTrue)
|
||||
.help("view package information"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("package")
|
||||
.help("packages")
|
||||
.required_unless_present("search")
|
||||
.action(ArgAction::Set)
|
||||
.num_args(1..),
|
||||
),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
match matches.subcommand() {
|
||||
Some(("sync", sync_matches)) => {
|
||||
if sync_matches.contains_id("search") {
|
||||
let packages: Vec<_> = sync_matches
|
||||
.get_many::<String>("search")
|
||||
.expect("contains_id")
|
||||
.map(|s| s.as_str())
|
||||
.collect();
|
||||
let values = packages.join(", ");
|
||||
println!("Searching for {values}...");
|
||||
return;
|
||||
}
|
||||
|
||||
let packages: Vec<_> = sync_matches
|
||||
.get_many::<String>("package")
|
||||
.expect("is present")
|
||||
.map(|s| s.as_str())
|
||||
.collect();
|
||||
let values = packages.join(", ");
|
||||
|
||||
if sync_matches.get_flag("info") {
|
||||
println!("Retrieving info for {values}...");
|
||||
} else {
|
||||
println!("Installing {values}...");
|
||||
}
|
||||
}
|
||||
Some(("query", query_matches)) => {
|
||||
if let Some(packages) = query_matches.get_many::<String>("info") {
|
||||
let comma_sep = packages.map(|s| s.as_str()).collect::<Vec<_>>().join(", ");
|
||||
println!("Retrieving info for {comma_sep}...");
|
||||
} else if let Some(queries) = query_matches.get_many::<String>("search") {
|
||||
let comma_sep = queries.map(|s| s.as_str()).collect::<Vec<_>>().join(", ");
|
||||
println!("Searching Locally for {comma_sep}...");
|
||||
} else {
|
||||
println!("Displaying all locally installed packages...");
|
||||
}
|
||||
}
|
||||
_ => unreachable!(), // If all subcommands are defined above, anything else is unreachable
|
||||
}
|
||||
}
|
92
vendor/clap/examples/repl.rs
vendored
Normal file
92
vendor/clap/examples/repl.rs
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
use std::io::Write;
|
||||
|
||||
use clap::Command;
|
||||
|
||||
fn main() -> Result<(), String> {
|
||||
loop {
|
||||
let line = readline()?;
|
||||
let line = line.trim();
|
||||
if line.is_empty() {
|
||||
continue;
|
||||
}
|
||||
|
||||
match respond(line) {
|
||||
Ok(quit) => {
|
||||
if quit {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
write!(std::io::stdout(), "{err}").map_err(|e| e.to_string())?;
|
||||
std::io::stdout().flush().map_err(|e| e.to_string())?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn respond(line: &str) -> Result<bool, String> {
|
||||
let args = shlex::split(line).ok_or("error: Invalid quoting")?;
|
||||
let matches = cli()
|
||||
.try_get_matches_from(args)
|
||||
.map_err(|e| e.to_string())?;
|
||||
match matches.subcommand() {
|
||||
Some(("ping", _matches)) => {
|
||||
write!(std::io::stdout(), "Pong").map_err(|e| e.to_string())?;
|
||||
std::io::stdout().flush().map_err(|e| e.to_string())?;
|
||||
}
|
||||
Some(("quit", _matches)) => {
|
||||
write!(std::io::stdout(), "Exiting ...").map_err(|e| e.to_string())?;
|
||||
std::io::stdout().flush().map_err(|e| e.to_string())?;
|
||||
return Ok(true);
|
||||
}
|
||||
Some((name, _matches)) => unimplemented!("{name}"),
|
||||
None => unreachable!("subcommand required"),
|
||||
}
|
||||
|
||||
Ok(false)
|
||||
}
|
||||
|
||||
fn cli() -> Command {
|
||||
// strip out usage
|
||||
const PARSER_TEMPLATE: &str = "\
|
||||
{all-args}
|
||||
";
|
||||
// strip out name/version
|
||||
const APPLET_TEMPLATE: &str = "\
|
||||
{about-with-newline}\n\
|
||||
{usage-heading}\n {usage}\n\
|
||||
\n\
|
||||
{all-args}{after-help}\
|
||||
";
|
||||
|
||||
Command::new("repl")
|
||||
.multicall(true)
|
||||
.arg_required_else_help(true)
|
||||
.subcommand_required(true)
|
||||
.subcommand_value_name("APPLET")
|
||||
.subcommand_help_heading("APPLETS")
|
||||
.help_template(PARSER_TEMPLATE)
|
||||
.subcommand(
|
||||
Command::new("ping")
|
||||
.about("Get a response")
|
||||
.help_template(APPLET_TEMPLATE),
|
||||
)
|
||||
.subcommand(
|
||||
Command::new("quit")
|
||||
.alias("exit")
|
||||
.about("Quit the REPL")
|
||||
.help_template(APPLET_TEMPLATE),
|
||||
)
|
||||
}
|
||||
|
||||
fn readline() -> Result<String, String> {
|
||||
write!(std::io::stdout(), "$ ").map_err(|e| e.to_string())?;
|
||||
std::io::stdout().flush().map_err(|e| e.to_string())?;
|
||||
let mut buffer = String::new();
|
||||
std::io::stdin()
|
||||
.read_line(&mut buffer)
|
||||
.map_err(|e| e.to_string())?;
|
||||
Ok(buffer)
|
||||
}
|
35
vendor/clap/examples/tutorial_builder/01_quick.md
vendored
Normal file
35
vendor/clap/examples/tutorial_builder/01_quick.md
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
```console
|
||||
$ 01_quick --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 01_quick[EXE] [OPTIONS] [name] [COMMAND]
|
||||
|
||||
Commands:
|
||||
test does testing things
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Arguments:
|
||||
[name] Optional name to operate on
|
||||
|
||||
Options:
|
||||
-c, --config <FILE> Sets a custom config file
|
||||
-d, --debug... Turn debugging information on
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
By default, the program does nothing:
|
||||
```console
|
||||
$ 01_quick
|
||||
Debug mode is off
|
||||
|
||||
```
|
||||
|
||||
But you can mix and match the various features
|
||||
```console
|
||||
$ 01_quick -dd test
|
||||
Debug mode is on
|
||||
Not printing testing lists...
|
||||
|
||||
```
|
60
vendor/clap/examples/tutorial_builder/01_quick.rs
vendored
Normal file
60
vendor/clap/examples/tutorial_builder/01_quick.rs
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::{arg, command, value_parser, ArgAction, Command};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(arg!([name] "Optional name to operate on"))
|
||||
.arg(
|
||||
arg!(
|
||||
-c --config <FILE> "Sets a custom config file"
|
||||
)
|
||||
// We don't have syntax yet for optional options, so manually calling `required`
|
||||
.required(false)
|
||||
.value_parser(value_parser!(PathBuf)),
|
||||
)
|
||||
.arg(arg!(
|
||||
-d --debug ... "Turn debugging information on"
|
||||
))
|
||||
.subcommand(
|
||||
Command::new("test")
|
||||
.about("does testing things")
|
||||
.arg(arg!(-l --list "lists test values").action(ArgAction::SetTrue)),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
// You can check the value provided by positional arguments, or option arguments
|
||||
if let Some(name) = matches.get_one::<String>("name") {
|
||||
println!("Value for name: {name}");
|
||||
}
|
||||
|
||||
if let Some(config_path) = matches.get_one::<PathBuf>("config") {
|
||||
println!("Value for config: {}", config_path.display());
|
||||
}
|
||||
|
||||
// You can see how many times a particular flag or argument occurred
|
||||
// Note, only flags can have multiple occurrences
|
||||
match matches
|
||||
.get_one::<u8>("debug")
|
||||
.expect("Count's are defaulted")
|
||||
{
|
||||
0 => println!("Debug mode is off"),
|
||||
1 => println!("Debug mode is kind of on"),
|
||||
2 => println!("Debug mode is on"),
|
||||
_ => println!("Don't be crazy"),
|
||||
}
|
||||
|
||||
// You can check for the existence of subcommands, and if found use their
|
||||
// matches just as you would the top level cmd
|
||||
if let Some(matches) = matches.subcommand_matches("test") {
|
||||
// "$ myapp test" was run
|
||||
if matches.get_flag("list") {
|
||||
// "$ myapp test -l" was run
|
||||
println!("Printing testing lists...");
|
||||
} else {
|
||||
println!("Not printing testing lists...");
|
||||
}
|
||||
}
|
||||
|
||||
// Continued program logic goes here...
|
||||
}
|
17
vendor/clap/examples/tutorial_builder/02_app_settings.md
vendored
Normal file
17
vendor/clap/examples/tutorial_builder/02_app_settings.md
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
```console
|
||||
$ 02_app_settings --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 02_app_settings[EXE] --two <VALUE> --one <VALUE>
|
||||
|
||||
Options:
|
||||
--two <VALUE>
|
||||
|
||||
--one <VALUE>
|
||||
|
||||
-h, --help
|
||||
Print help
|
||||
-V, --version
|
||||
Print version
|
||||
|
||||
```
|
18
vendor/clap/examples/tutorial_builder/02_app_settings.rs
vendored
Normal file
18
vendor/clap/examples/tutorial_builder/02_app_settings.rs
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
use clap::{arg, command, ArgAction};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.next_line_help(true)
|
||||
.arg(arg!(--two <VALUE>).required(true).action(ArgAction::Set))
|
||||
.arg(arg!(--one <VALUE>).required(true).action(ArgAction::Set))
|
||||
.get_matches();
|
||||
|
||||
println!(
|
||||
"two: {:?}",
|
||||
matches.get_one::<String>("two").expect("required")
|
||||
);
|
||||
println!(
|
||||
"one: {:?}",
|
||||
matches.get_one::<String>("one").expect("required")
|
||||
);
|
||||
}
|
16
vendor/clap/examples/tutorial_builder/02_apps.md
vendored
Normal file
16
vendor/clap/examples/tutorial_builder/02_apps.md
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
```console
|
||||
$ 02_apps --help
|
||||
Does awesome things
|
||||
|
||||
Usage: 02_apps[EXE] --two <VALUE> --one <VALUE>
|
||||
|
||||
Options:
|
||||
--two <VALUE>
|
||||
--one <VALUE>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 02_apps --version
|
||||
MyApp 1.0
|
||||
|
||||
```
|
20
vendor/clap/examples/tutorial_builder/02_apps.rs
vendored
Normal file
20
vendor/clap/examples/tutorial_builder/02_apps.rs
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
use clap::{arg, Command};
|
||||
|
||||
fn main() {
|
||||
let matches = Command::new("MyApp")
|
||||
.version("1.0")
|
||||
.author("Kevin K. <kbknapp@gmail.com>")
|
||||
.about("Does awesome things")
|
||||
.arg(arg!(--two <VALUE>).required(true))
|
||||
.arg(arg!(--one <VALUE>).required(true))
|
||||
.get_matches();
|
||||
|
||||
println!(
|
||||
"two: {:?}",
|
||||
matches.get_one::<String>("two").expect("required")
|
||||
);
|
||||
println!(
|
||||
"one: {:?}",
|
||||
matches.get_one::<String>("one").expect("required")
|
||||
);
|
||||
}
|
16
vendor/clap/examples/tutorial_builder/02_crate.md
vendored
Normal file
16
vendor/clap/examples/tutorial_builder/02_crate.md
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
```console
|
||||
$ 02_crate --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 02_crate[EXE] --two <VALUE> --one <VALUE>
|
||||
|
||||
Options:
|
||||
--two <VALUE>
|
||||
--one <VALUE>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 02_crate --version
|
||||
clap [..]
|
||||
|
||||
```
|
18
vendor/clap/examples/tutorial_builder/02_crate.rs
vendored
Normal file
18
vendor/clap/examples/tutorial_builder/02_crate.rs
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
use clap::{arg, command};
|
||||
|
||||
fn main() {
|
||||
// requires `cargo` feature, reading name, version, author, and description from `Cargo.toml`
|
||||
let matches = command!()
|
||||
.arg(arg!(--two <VALUE>).required(true))
|
||||
.arg(arg!(--one <VALUE>).required(true))
|
||||
.get_matches();
|
||||
|
||||
println!(
|
||||
"two: {:?}",
|
||||
matches.get_one::<String>("two").expect("required")
|
||||
);
|
||||
println!(
|
||||
"one: {:?}",
|
||||
matches.get_one::<String>("one").expect("required")
|
||||
);
|
||||
}
|
26
vendor/clap/examples/tutorial_builder/03_01_flag_bool.md
vendored
Normal file
26
vendor/clap/examples/tutorial_builder/03_01_flag_bool.md
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
```console
|
||||
$ 03_01_flag_bool --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_01_flag_bool[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-v, --verbose
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_01_flag_bool
|
||||
verbose: false
|
||||
|
||||
$ 03_01_flag_bool --verbose
|
||||
verbose: true
|
||||
|
||||
$ 03_01_flag_bool --verbose --verbose
|
||||
? failed
|
||||
error: the argument '--verbose' cannot be used multiple times
|
||||
|
||||
Usage: 03_01_flag_bool[EXE] [OPTIONS]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_builder/03_01_flag_bool.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_builder/03_01_flag_bool.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::{command, Arg, ArgAction};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
Arg::new("verbose")
|
||||
.short('v')
|
||||
.long("verbose")
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
println!("verbose: {:?}", matches.get_flag("verbose"));
|
||||
}
|
21
vendor/clap/examples/tutorial_builder/03_01_flag_count.md
vendored
Normal file
21
vendor/clap/examples/tutorial_builder/03_01_flag_count.md
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
```console
|
||||
$ 03_01_flag_count --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_01_flag_count[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-v, --verbose...
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_01_flag_count
|
||||
verbose: 0
|
||||
|
||||
$ 03_01_flag_count --verbose
|
||||
verbose: 1
|
||||
|
||||
$ 03_01_flag_count --verbose --verbose
|
||||
verbose: 2
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_builder/03_01_flag_count.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_builder/03_01_flag_count.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::{command, Arg, ArgAction};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
Arg::new("verbose")
|
||||
.short('v')
|
||||
.long("verbose")
|
||||
.action(ArgAction::Count),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
println!("verbose: {:?}", matches.get_count("verbose"));
|
||||
}
|
30
vendor/clap/examples/tutorial_builder/03_02_option.md
vendored
Normal file
30
vendor/clap/examples/tutorial_builder/03_02_option.md
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
```console
|
||||
$ 03_02_option --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_02_option[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-n, --name <name>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_02_option
|
||||
name: None
|
||||
|
||||
$ 03_02_option --name bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option --name=bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option -n bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option -n=bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option -nbob
|
||||
name: Some("bob")
|
||||
|
||||
```
|
9
vendor/clap/examples/tutorial_builder/03_02_option.rs
vendored
Normal file
9
vendor/clap/examples/tutorial_builder/03_02_option.rs
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
use clap::{command, Arg};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(Arg::new("name").short('n').long("name"))
|
||||
.get_matches();
|
||||
|
||||
println!("name: {:?}", matches.get_one::<String>("name"));
|
||||
}
|
30
vendor/clap/examples/tutorial_builder/03_02_option_mult.md
vendored
Normal file
30
vendor/clap/examples/tutorial_builder/03_02_option_mult.md
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
```console
|
||||
$ 03_02_option_mult --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_02_option_mult[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-n, --name <name>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_02_option_mult
|
||||
name: None
|
||||
|
||||
$ 03_02_option_mult --name bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_mult --name=bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_mult -n bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_mult -n=bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_mult -nbob
|
||||
name: Some("bob")
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_builder/03_02_option_mult.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_builder/03_02_option_mult.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::{command, Arg, ArgAction};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
Arg::new("name")
|
||||
.short('n')
|
||||
.long("name")
|
||||
.action(ArgAction::Append),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
println!("name: {:?}", matches.get_one::<String>("name"));
|
||||
}
|
20
vendor/clap/examples/tutorial_builder/03_03_positional.md
vendored
Normal file
20
vendor/clap/examples/tutorial_builder/03_03_positional.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
```console
|
||||
$ 03_03_positional --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_03_positional[EXE] [name]
|
||||
|
||||
Arguments:
|
||||
[name]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_03_positional
|
||||
name: None
|
||||
|
||||
$ 03_03_positional bob
|
||||
name: Some("bob")
|
||||
|
||||
```
|
9
vendor/clap/examples/tutorial_builder/03_03_positional.rs
vendored
Normal file
9
vendor/clap/examples/tutorial_builder/03_03_positional.rs
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
use clap::{command, Arg};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(Arg::new("name"))
|
||||
.get_matches();
|
||||
|
||||
println!("name: {:?}", matches.get_one::<String>("name"));
|
||||
}
|
23
vendor/clap/examples/tutorial_builder/03_03_positional_mult.md
vendored
Normal file
23
vendor/clap/examples/tutorial_builder/03_03_positional_mult.md
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
```console
|
||||
$ 03_03_positional_mult --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_03_positional_mult[EXE] [name]...
|
||||
|
||||
Arguments:
|
||||
[name]...
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_03_positional_mult
|
||||
names: []
|
||||
|
||||
$ 03_03_positional_mult bob
|
||||
names: ["bob"]
|
||||
|
||||
$ 03_03_positional_mult bob john
|
||||
names: ["bob", "john"]
|
||||
|
||||
```
|
15
vendor/clap/examples/tutorial_builder/03_03_positional_mult.rs
vendored
Normal file
15
vendor/clap/examples/tutorial_builder/03_03_positional_mult.rs
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
use clap::{command, Arg, ArgAction};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(Arg::new("name").action(ArgAction::Append))
|
||||
.get_matches();
|
||||
|
||||
let args = matches
|
||||
.get_many::<String>("name")
|
||||
.unwrap_or_default()
|
||||
.map(|v| v.as_str())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
println!("names: {:?}", &args);
|
||||
}
|
59
vendor/clap/examples/tutorial_builder/03_04_subcommands.md
vendored
Normal file
59
vendor/clap/examples/tutorial_builder/03_04_subcommands.md
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
```console
|
||||
$ 03_04_subcommands help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_04_subcommands[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
add Adds files to myapp
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_04_subcommands help add
|
||||
Adds files to myapp
|
||||
|
||||
Usage: 03_04_subcommands[EXE] add [NAME]
|
||||
|
||||
Arguments:
|
||||
[NAME]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_04_subcommands add bob
|
||||
'myapp add' was used, name is: Some("bob")
|
||||
|
||||
```
|
||||
|
||||
Because we set [`Command::arg_required_else_help`][crate::Command::arg_required_else_help]:
|
||||
```console
|
||||
$ 03_04_subcommands
|
||||
? failed
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_04_subcommands[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
add Adds files to myapp
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
Since we specified [`Command::propagate_version`][crate::Command::propagate_version], the `--version` flag
|
||||
is available in all subcommands:
|
||||
```console
|
||||
$ 03_04_subcommands --version
|
||||
clap [..]
|
||||
|
||||
$ 03_04_subcommands add --version
|
||||
clap-add [..]
|
||||
|
||||
```
|
22
vendor/clap/examples/tutorial_builder/03_04_subcommands.rs
vendored
Normal file
22
vendor/clap/examples/tutorial_builder/03_04_subcommands.rs
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
use clap::{arg, command, Command};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.propagate_version(true)
|
||||
.subcommand_required(true)
|
||||
.arg_required_else_help(true)
|
||||
.subcommand(
|
||||
Command::new("add")
|
||||
.about("Adds files to myapp")
|
||||
.arg(arg!([NAME])),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
match matches.subcommand() {
|
||||
Some(("add", sub_matches)) => println!(
|
||||
"'myapp add' was used, name is: {:?}",
|
||||
sub_matches.get_one::<String>("NAME")
|
||||
),
|
||||
_ => unreachable!("Exhausted list of subcommands and subcommand_required prevents `None`"),
|
||||
}
|
||||
}
|
20
vendor/clap/examples/tutorial_builder/03_05_default_values.md
vendored
Normal file
20
vendor/clap/examples/tutorial_builder/03_05_default_values.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
```console
|
||||
$ 03_05_default_values --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_05_default_values[EXE] [PORT]
|
||||
|
||||
Arguments:
|
||||
[PORT] [default: 2020]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_05_default_values
|
||||
port: 2020
|
||||
|
||||
$ 03_05_default_values 22
|
||||
port: 22
|
||||
|
||||
```
|
18
vendor/clap/examples/tutorial_builder/03_05_default_values.rs
vendored
Normal file
18
vendor/clap/examples/tutorial_builder/03_05_default_values.rs
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
use clap::{arg, command, value_parser};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
arg!([PORT])
|
||||
.value_parser(value_parser!(u16))
|
||||
.default_value("2020"),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
println!(
|
||||
"port: {:?}",
|
||||
matches
|
||||
.get_one::<u16>("PORT")
|
||||
.expect("default ensures there is always a value")
|
||||
);
|
||||
}
|
47
vendor/clap/examples/tutorial_builder/04_01_enum.md
vendored
Normal file
47
vendor/clap/examples/tutorial_builder/04_01_enum.md
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
```console
|
||||
$ 04_01_enum --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_01_enum[EXE] <MODE>
|
||||
|
||||
Arguments:
|
||||
<MODE>
|
||||
What mode to run the program in
|
||||
|
||||
Possible values:
|
||||
- fast: Run swiftly
|
||||
- slow: Crawl slowly but steadily
|
||||
|
||||
Options:
|
||||
-h, --help
|
||||
Print help (see a summary with '-h')
|
||||
|
||||
-V, --version
|
||||
Print version
|
||||
|
||||
$ 04_01_enum -h
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_01_enum[EXE] <MODE>
|
||||
|
||||
Arguments:
|
||||
<MODE> What mode to run the program in [possible values: fast, slow]
|
||||
|
||||
Options:
|
||||
-h, --help Print help (see more with '--help')
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_01_enum fast
|
||||
Hare
|
||||
|
||||
$ 04_01_enum slow
|
||||
Tortoise
|
||||
|
||||
$ 04_01_enum medium
|
||||
? failed
|
||||
error: invalid value 'medium' for '<MODE>'
|
||||
[possible values: fast, slow]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
66
vendor/clap/examples/tutorial_builder/04_01_enum.rs
vendored
Normal file
66
vendor/clap/examples/tutorial_builder/04_01_enum.rs
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
use clap::{arg, builder::PossibleValue, command, value_parser, ValueEnum};
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
|
||||
enum Mode {
|
||||
Fast,
|
||||
Slow,
|
||||
}
|
||||
|
||||
// Can also be derived with feature flag `derive`
|
||||
impl ValueEnum for Mode {
|
||||
fn value_variants<'a>() -> &'a [Self] {
|
||||
&[Mode::Fast, Mode::Slow]
|
||||
}
|
||||
|
||||
fn to_possible_value<'a>(&self) -> Option<PossibleValue> {
|
||||
Some(match self {
|
||||
Mode::Fast => PossibleValue::new("fast").help("Run swiftly"),
|
||||
Mode::Slow => PossibleValue::new("slow").help("Crawl slowly but steadily"),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for Mode {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
self.to_possible_value()
|
||||
.expect("no values are skipped")
|
||||
.get_name()
|
||||
.fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
impl std::str::FromStr for Mode {
|
||||
type Err = String;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
for variant in Self::value_variants() {
|
||||
if variant.to_possible_value().unwrap().matches(s, false) {
|
||||
return Ok(*variant);
|
||||
}
|
||||
}
|
||||
Err(format!("invalid variant: {s}"))
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
arg!(<MODE>)
|
||||
.help("What mode to run the program in")
|
||||
.value_parser(value_parser!(Mode)),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
// Note, it's safe to call unwrap() because the arg is required
|
||||
match matches
|
||||
.get_one::<Mode>("MODE")
|
||||
.expect("'MODE' is required and parsing will fail if its missing")
|
||||
{
|
||||
Mode::Fast => {
|
||||
println!("Hare");
|
||||
}
|
||||
Mode::Slow => {
|
||||
println!("Tortoise");
|
||||
}
|
||||
}
|
||||
}
|
27
vendor/clap/examples/tutorial_builder/04_01_possible.md
vendored
Normal file
27
vendor/clap/examples/tutorial_builder/04_01_possible.md
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
```console
|
||||
$ 04_01_possible --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_01_possible[EXE] <MODE>
|
||||
|
||||
Arguments:
|
||||
<MODE> What mode to run the program in [possible values: fast, slow]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_01_possible fast
|
||||
Hare
|
||||
|
||||
$ 04_01_possible slow
|
||||
Tortoise
|
||||
|
||||
$ 04_01_possible medium
|
||||
? failed
|
||||
error: invalid value 'medium' for '<MODE>'
|
||||
[possible values: fast, slow]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
26
vendor/clap/examples/tutorial_builder/04_01_possible.rs
vendored
Normal file
26
vendor/clap/examples/tutorial_builder/04_01_possible.rs
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
use clap::{arg, command};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
arg!(<MODE>)
|
||||
.help("What mode to run the program in")
|
||||
.value_parser(["fast", "slow"]),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
// Note, it's safe to call unwrap() because the arg is required
|
||||
match matches
|
||||
.get_one::<String>("MODE")
|
||||
.expect("'MODE' is required and parsing will fail if its missing")
|
||||
.as_str()
|
||||
{
|
||||
"fast" => {
|
||||
println!("Hare");
|
||||
}
|
||||
"slow" => {
|
||||
println!("Tortoise");
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
29
vendor/clap/examples/tutorial_builder/04_02_parse.md
vendored
Normal file
29
vendor/clap/examples/tutorial_builder/04_02_parse.md
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
```console
|
||||
$ 04_02_parse --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_02_parse[EXE] <PORT>
|
||||
|
||||
Arguments:
|
||||
<PORT> Network port to use
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_02_parse 22
|
||||
PORT = 22
|
||||
|
||||
$ 04_02_parse foobar
|
||||
? failed
|
||||
error: invalid value 'foobar' for '<PORT>': invalid digit found in string
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_02_parse_derive 0
|
||||
? failed
|
||||
error: invalid value '0' for '<PORT>': 0 is not in 1..=65535
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
17
vendor/clap/examples/tutorial_builder/04_02_parse.rs
vendored
Normal file
17
vendor/clap/examples/tutorial_builder/04_02_parse.rs
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
use clap::{arg, command, value_parser};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
arg!(<PORT>)
|
||||
.help("Network port to use")
|
||||
.value_parser(value_parser!(u16).range(1..)),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
// Note, it's safe to call unwrap() because the arg is required
|
||||
let port: u16 = *matches
|
||||
.get_one::<u16>("PORT")
|
||||
.expect("'PORT' is required and parsing will fail if its missing");
|
||||
println!("PORT = {port}");
|
||||
}
|
29
vendor/clap/examples/tutorial_builder/04_02_validate.md
vendored
Normal file
29
vendor/clap/examples/tutorial_builder/04_02_validate.md
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
```console
|
||||
$ 04_02_validate --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_02_validate[EXE] <PORT>
|
||||
|
||||
Arguments:
|
||||
<PORT> Network port to use
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_02_validate 22
|
||||
PORT = 22
|
||||
|
||||
$ 04_02_validate foobar
|
||||
? failed
|
||||
error: invalid value 'foobar' for '<PORT>': `foobar` isn't a port number
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_02_validate 0
|
||||
? failed
|
||||
error: invalid value '0' for '<PORT>': port not in range 1-65535
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
36
vendor/clap/examples/tutorial_builder/04_02_validate.rs
vendored
Normal file
36
vendor/clap/examples/tutorial_builder/04_02_validate.rs
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
use std::ops::RangeInclusive;
|
||||
|
||||
use clap::{arg, command};
|
||||
|
||||
fn main() {
|
||||
let matches = command!() // requires `cargo` feature
|
||||
.arg(
|
||||
arg!(<PORT>)
|
||||
.help("Network port to use")
|
||||
.value_parser(port_in_range),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
// Note, it's safe to call unwrap() because the arg is required
|
||||
let port: u16 = *matches
|
||||
.get_one::<u16>("PORT")
|
||||
.expect("'PORT' is required and parsing will fail if its missing");
|
||||
println!("PORT = {port}");
|
||||
}
|
||||
|
||||
const PORT_RANGE: RangeInclusive<usize> = 1..=65535;
|
||||
|
||||
fn port_in_range(s: &str) -> Result<u16, String> {
|
||||
let port: usize = s
|
||||
.parse()
|
||||
.map_err(|_| format!("`{s}` isn't a port number"))?;
|
||||
if PORT_RANGE.contains(&port) {
|
||||
Ok(port as u16)
|
||||
} else {
|
||||
Err(format!(
|
||||
"port not in range {}-{}",
|
||||
PORT_RANGE.start(),
|
||||
PORT_RANGE.end()
|
||||
))
|
||||
}
|
||||
}
|
53
vendor/clap/examples/tutorial_builder/04_03_relations.md
vendored
Normal file
53
vendor/clap/examples/tutorial_builder/04_03_relations.md
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
```console
|
||||
$ 04_03_relations --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_03_relations[EXE] [OPTIONS] <--set-ver <VER>|--major|--minor|--patch> [INPUT_FILE]
|
||||
|
||||
Arguments:
|
||||
[INPUT_FILE] some regular input
|
||||
|
||||
Options:
|
||||
--set-ver <VER> set version manually
|
||||
--major auto inc major
|
||||
--minor auto inc minor
|
||||
--patch auto inc patch
|
||||
--spec-in <SPEC_IN> some special input argument
|
||||
-c <CONFIG>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_03_relations
|
||||
? failed
|
||||
error: the following required arguments were not provided:
|
||||
<--set-ver <VER>|--major|--minor|--patch>
|
||||
|
||||
Usage: 04_03_relations[EXE] <--set-ver <VER>|--major|--minor|--patch> [INPUT_FILE]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_03_relations --major
|
||||
Version: 2.2.3
|
||||
|
||||
$ 04_03_relations --major --minor
|
||||
? failed
|
||||
error: the argument '--major' cannot be used with '--minor'
|
||||
|
||||
Usage: 04_03_relations[EXE] <--set-ver <VER>|--major|--minor|--patch> [INPUT_FILE]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_03_relations --major -c config.toml
|
||||
? failed
|
||||
error: the following required arguments were not provided:
|
||||
<INPUT_FILE|--spec-in <SPEC_IN>>
|
||||
|
||||
Usage: 04_03_relations[EXE] -c <CONFIG> <--set-ver <VER>|--major|--minor|--patch> <INPUT_FILE|--spec-in <SPEC_IN>>
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_03_relations --major -c config.toml --spec-in input.txt
|
||||
Version: 2.2.3
|
||||
Doing work using input input.txt and config config.toml
|
||||
|
||||
```
|
78
vendor/clap/examples/tutorial_builder/04_03_relations.rs
vendored
Normal file
78
vendor/clap/examples/tutorial_builder/04_03_relations.rs
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::{arg, command, value_parser, ArgAction, ArgGroup};
|
||||
|
||||
fn main() {
|
||||
// Create application like normal
|
||||
let matches = command!() // requires `cargo` feature
|
||||
// Add the version arguments
|
||||
.arg(arg!(--"set-ver" <VER> "set version manually"))
|
||||
.arg(arg!(--major "auto inc major").action(ArgAction::SetTrue))
|
||||
.arg(arg!(--minor "auto inc minor").action(ArgAction::SetTrue))
|
||||
.arg(arg!(--patch "auto inc patch").action(ArgAction::SetTrue))
|
||||
// Create a group, make it required, and add the above arguments
|
||||
.group(
|
||||
ArgGroup::new("vers")
|
||||
.required(true)
|
||||
.args(["set-ver", "major", "minor", "patch"]),
|
||||
)
|
||||
// Arguments can also be added to a group individually, these two arguments
|
||||
// are part of the "input" group which is not required
|
||||
.arg(
|
||||
arg!([INPUT_FILE] "some regular input")
|
||||
.value_parser(value_parser!(PathBuf))
|
||||
.group("input"),
|
||||
)
|
||||
.arg(
|
||||
arg!(--"spec-in" <SPEC_IN> "some special input argument")
|
||||
.value_parser(value_parser!(PathBuf))
|
||||
.group("input"),
|
||||
)
|
||||
// Now let's assume we have a -c [config] argument which requires one of
|
||||
// (but **not** both) the "input" arguments
|
||||
.arg(
|
||||
arg!(config: -c <CONFIG>)
|
||||
.value_parser(value_parser!(PathBuf))
|
||||
.requires("input"),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
// Let's assume the old version 1.2.3
|
||||
let mut major = 1;
|
||||
let mut minor = 2;
|
||||
let mut patch = 3;
|
||||
|
||||
// See if --set-ver was used to set the version manually
|
||||
let version = if let Some(ver) = matches.get_one::<String>("set-ver") {
|
||||
ver.to_owned()
|
||||
} else {
|
||||
// Increment the one requested (in a real program, we'd reset the lower numbers)
|
||||
let (maj, min, pat) = (
|
||||
matches.get_flag("major"),
|
||||
matches.get_flag("minor"),
|
||||
matches.get_flag("patch"),
|
||||
);
|
||||
match (maj, min, pat) {
|
||||
(true, _, _) => major += 1,
|
||||
(_, true, _) => minor += 1,
|
||||
(_, _, true) => patch += 1,
|
||||
_ => unreachable!(),
|
||||
};
|
||||
format!("{major}.{minor}.{patch}")
|
||||
};
|
||||
|
||||
println!("Version: {version}");
|
||||
|
||||
// Check for usage of -c
|
||||
if matches.contains_id("config") {
|
||||
let input = matches
|
||||
.get_one::<PathBuf>("INPUT_FILE")
|
||||
.unwrap_or_else(|| matches.get_one::<PathBuf>("spec-in").unwrap())
|
||||
.display();
|
||||
println!(
|
||||
"Doing work using input {} and config {}",
|
||||
input,
|
||||
matches.get_one::<PathBuf>("config").unwrap().display()
|
||||
);
|
||||
}
|
||||
}
|
52
vendor/clap/examples/tutorial_builder/04_04_custom.md
vendored
Normal file
52
vendor/clap/examples/tutorial_builder/04_04_custom.md
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
```console
|
||||
$ 04_04_custom --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_04_custom[EXE] [OPTIONS] [INPUT_FILE]
|
||||
|
||||
Arguments:
|
||||
[INPUT_FILE] some regular input
|
||||
|
||||
Options:
|
||||
--set-ver <VER> set version manually
|
||||
--major auto inc major
|
||||
--minor auto inc minor
|
||||
--patch auto inc patch
|
||||
--spec-in <SPEC_IN> some special input argument
|
||||
-c <CONFIG>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_04_custom
|
||||
? failed
|
||||
error: Can only modify one version field
|
||||
|
||||
Usage: 04_04_custom[EXE] [OPTIONS] [INPUT_FILE]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_04_custom --major
|
||||
Version: 2.2.3
|
||||
|
||||
$ 04_04_custom --major --minor
|
||||
? failed
|
||||
error: Can only modify one version field
|
||||
|
||||
Usage: 04_04_custom[EXE] [OPTIONS] [INPUT_FILE]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_04_custom --major -c config.toml
|
||||
? failed
|
||||
Version: 2.2.3
|
||||
error: INPUT_FILE or --spec-in is required when using --config
|
||||
|
||||
Usage: 04_04_custom[EXE] [OPTIONS] [INPUT_FILE]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_04_custom --major -c config.toml --spec-in input.txt
|
||||
Version: 2.2.3
|
||||
Doing work using input input.txt and config config.toml
|
||||
|
||||
```
|
84
vendor/clap/examples/tutorial_builder/04_04_custom.rs
vendored
Normal file
84
vendor/clap/examples/tutorial_builder/04_04_custom.rs
vendored
Normal file
@ -0,0 +1,84 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::error::ErrorKind;
|
||||
use clap::{arg, command, value_parser, ArgAction};
|
||||
|
||||
fn main() {
|
||||
// Create application like normal
|
||||
let mut cmd = command!() // requires `cargo` feature
|
||||
// Add the version arguments
|
||||
.arg(arg!(--"set-ver" <VER> "set version manually"))
|
||||
.arg(arg!(--major "auto inc major").action(ArgAction::SetTrue))
|
||||
.arg(arg!(--minor "auto inc minor").action(ArgAction::SetTrue))
|
||||
.arg(arg!(--patch "auto inc patch").action(ArgAction::SetTrue))
|
||||
// Arguments can also be added to a group individually, these two arguments
|
||||
// are part of the "input" group which is not required
|
||||
.arg(arg!([INPUT_FILE] "some regular input").value_parser(value_parser!(PathBuf)))
|
||||
.arg(
|
||||
arg!(--"spec-in" <SPEC_IN> "some special input argument")
|
||||
.value_parser(value_parser!(PathBuf)),
|
||||
)
|
||||
// Now let's assume we have a -c [config] argument which requires one of
|
||||
// (but **not** both) the "input" arguments
|
||||
.arg(arg!(config: -c <CONFIG>).value_parser(value_parser!(PathBuf)));
|
||||
let matches = cmd.get_matches_mut();
|
||||
|
||||
// Let's assume the old version 1.2.3
|
||||
let mut major = 1;
|
||||
let mut minor = 2;
|
||||
let mut patch = 3;
|
||||
|
||||
// See if --set-ver was used to set the version manually
|
||||
let version = if let Some(ver) = matches.get_one::<String>("set-ver") {
|
||||
if matches.get_flag("major") || matches.get_flag("minor") || matches.get_flag("patch") {
|
||||
cmd.error(
|
||||
ErrorKind::ArgumentConflict,
|
||||
"Can't do relative and absolute version change",
|
||||
)
|
||||
.exit();
|
||||
}
|
||||
ver.to_string()
|
||||
} else {
|
||||
// Increment the one requested (in a real program, we'd reset the lower numbers)
|
||||
let (maj, min, pat) = (
|
||||
matches.get_flag("major"),
|
||||
matches.get_flag("minor"),
|
||||
matches.get_flag("patch"),
|
||||
);
|
||||
match (maj, min, pat) {
|
||||
(true, false, false) => major += 1,
|
||||
(false, true, false) => minor += 1,
|
||||
(false, false, true) => patch += 1,
|
||||
_ => {
|
||||
cmd.error(
|
||||
ErrorKind::ArgumentConflict,
|
||||
"Can only modify one version field",
|
||||
)
|
||||
.exit();
|
||||
}
|
||||
};
|
||||
format!("{major}.{minor}.{patch}")
|
||||
};
|
||||
|
||||
println!("Version: {version}");
|
||||
|
||||
// Check for usage of -c
|
||||
if matches.contains_id("config") {
|
||||
let input = matches
|
||||
.get_one::<PathBuf>("INPUT_FILE")
|
||||
.or_else(|| matches.get_one::<PathBuf>("spec-in"))
|
||||
.unwrap_or_else(|| {
|
||||
cmd.error(
|
||||
ErrorKind::MissingRequiredArgument,
|
||||
"INPUT_FILE or --spec-in is required when using --config",
|
||||
)
|
||||
.exit()
|
||||
})
|
||||
.display();
|
||||
println!(
|
||||
"Doing work using input {} and config {}",
|
||||
input,
|
||||
matches.get_one::<PathBuf>("config").unwrap().display()
|
||||
);
|
||||
}
|
||||
}
|
25
vendor/clap/examples/tutorial_builder/05_01_assert.rs
vendored
Normal file
25
vendor/clap/examples/tutorial_builder/05_01_assert.rs
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
use clap::{arg, command, value_parser};
|
||||
|
||||
fn main() {
|
||||
let matches = cmd().get_matches();
|
||||
|
||||
// Note, it's safe to call unwrap() because the arg is required
|
||||
let port: usize = *matches
|
||||
.get_one::<usize>("PORT")
|
||||
.expect("'PORT' is required and parsing will fail if its missing");
|
||||
println!("PORT = {port}");
|
||||
}
|
||||
|
||||
fn cmd() -> clap::Command {
|
||||
command!() // requires `cargo` feature
|
||||
.arg(
|
||||
arg!(<PORT>)
|
||||
.help("Network port to use")
|
||||
.value_parser(value_parser!(usize)),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn verify_cmd() {
|
||||
cmd().debug_assert();
|
||||
}
|
35
vendor/clap/examples/tutorial_derive/01_quick.md
vendored
Normal file
35
vendor/clap/examples/tutorial_derive/01_quick.md
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
```console
|
||||
$ 01_quick_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 01_quick_derive[EXE] [OPTIONS] [NAME] [COMMAND]
|
||||
|
||||
Commands:
|
||||
test does testing things
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Arguments:
|
||||
[NAME] Optional name to operate on
|
||||
|
||||
Options:
|
||||
-c, --config <FILE> Sets a custom config file
|
||||
-d, --debug... Turn debugging information on
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
By default, the program does nothing:
|
||||
```console
|
||||
$ 01_quick_derive
|
||||
Debug mode is off
|
||||
|
||||
```
|
||||
|
||||
But you can mix and match the various features
|
||||
```console
|
||||
$ 01_quick_derive -dd test
|
||||
Debug mode is on
|
||||
Not printing testing lists...
|
||||
|
||||
```
|
68
vendor/clap/examples/tutorial_derive/01_quick.rs
vendored
Normal file
68
vendor/clap/examples/tutorial_derive/01_quick.rs
vendored
Normal file
@ -0,0 +1,68 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::{Parser, Subcommand};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
/// Optional name to operate on
|
||||
name: Option<String>,
|
||||
|
||||
/// Sets a custom config file
|
||||
#[arg(short, long, value_name = "FILE")]
|
||||
config: Option<PathBuf>,
|
||||
|
||||
/// Turn debugging information on
|
||||
#[arg(short, long, action = clap::ArgAction::Count)]
|
||||
debug: u8,
|
||||
|
||||
#[command(subcommand)]
|
||||
command: Option<Commands>,
|
||||
}
|
||||
|
||||
#[derive(Subcommand)]
|
||||
enum Commands {
|
||||
/// does testing things
|
||||
Test {
|
||||
/// lists test values
|
||||
#[arg(short, long)]
|
||||
list: bool,
|
||||
},
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
// You can check the value provided by positional arguments, or option arguments
|
||||
if let Some(name) = cli.name.as_deref() {
|
||||
println!("Value for name: {name}");
|
||||
}
|
||||
|
||||
if let Some(config_path) = cli.config.as_deref() {
|
||||
println!("Value for config: {}", config_path.display());
|
||||
}
|
||||
|
||||
// You can see how many times a particular flag or argument occurred
|
||||
// Note, only flags can have multiple occurrences
|
||||
match cli.debug {
|
||||
0 => println!("Debug mode is off"),
|
||||
1 => println!("Debug mode is kind of on"),
|
||||
2 => println!("Debug mode is on"),
|
||||
_ => println!("Don't be crazy"),
|
||||
}
|
||||
|
||||
// You can check for the existence of subcommands, and if found use their
|
||||
// matches just as you would the top level cmd
|
||||
match &cli.command {
|
||||
Some(Commands::Test { list }) => {
|
||||
if *list {
|
||||
println!("Printing testing lists...");
|
||||
} else {
|
||||
println!("Not printing testing lists...");
|
||||
}
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
|
||||
// Continued program logic goes here...
|
||||
}
|
17
vendor/clap/examples/tutorial_derive/02_app_settings.md
vendored
Normal file
17
vendor/clap/examples/tutorial_derive/02_app_settings.md
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
```console
|
||||
$ 02_app_settings_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 02_app_settings_derive[EXE] --two <TWO> --one <ONE>
|
||||
|
||||
Options:
|
||||
--two <TWO>
|
||||
|
||||
--one <ONE>
|
||||
|
||||
-h, --help
|
||||
Print help
|
||||
-V, --version
|
||||
Print version
|
||||
|
||||
```
|
18
vendor/clap/examples/tutorial_derive/02_app_settings.rs
vendored
Normal file
18
vendor/clap/examples/tutorial_derive/02_app_settings.rs
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
#[command(next_line_help = true)]
|
||||
struct Cli {
|
||||
#[arg(long)]
|
||||
two: String,
|
||||
#[arg(long)]
|
||||
one: String,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("two: {:?}", cli.two);
|
||||
println!("one: {:?}", cli.one);
|
||||
}
|
16
vendor/clap/examples/tutorial_derive/02_apps.md
vendored
Normal file
16
vendor/clap/examples/tutorial_derive/02_apps.md
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
```console
|
||||
$ 02_apps_derive --help
|
||||
Does awesome things
|
||||
|
||||
Usage: 02_apps_derive[EXE] --two <TWO> --one <ONE>
|
||||
|
||||
Options:
|
||||
--two <TWO>
|
||||
--one <ONE>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 02_apps_derive --version
|
||||
MyApp 1.0
|
||||
|
||||
```
|
20
vendor/clap/examples/tutorial_derive/02_apps.rs
vendored
Normal file
20
vendor/clap/examples/tutorial_derive/02_apps.rs
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(name = "MyApp")]
|
||||
#[command(author = "Kevin K. <kbknapp@gmail.com>")]
|
||||
#[command(version = "1.0")]
|
||||
#[command(about = "Does awesome things", long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(long)]
|
||||
two: String,
|
||||
#[arg(long)]
|
||||
one: String,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("two: {:?}", cli.two);
|
||||
println!("one: {:?}", cli.one);
|
||||
}
|
16
vendor/clap/examples/tutorial_derive/02_crate.md
vendored
Normal file
16
vendor/clap/examples/tutorial_derive/02_crate.md
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
```console
|
||||
$ 02_crate_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 02_crate_derive[EXE] --two <TWO> --one <ONE>
|
||||
|
||||
Options:
|
||||
--two <TWO>
|
||||
--one <ONE>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 02_crate_derive --version
|
||||
clap [..]
|
||||
|
||||
```
|
17
vendor/clap/examples/tutorial_derive/02_crate.rs
vendored
Normal file
17
vendor/clap/examples/tutorial_derive/02_crate.rs
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)] // Read from `Cargo.toml`
|
||||
struct Cli {
|
||||
#[arg(long)]
|
||||
two: String,
|
||||
#[arg(long)]
|
||||
one: String,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("two: {:?}", cli.two);
|
||||
println!("one: {:?}", cli.one);
|
||||
}
|
26
vendor/clap/examples/tutorial_derive/03_01_flag_bool.md
vendored
Normal file
26
vendor/clap/examples/tutorial_derive/03_01_flag_bool.md
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
```console
|
||||
$ 03_01_flag_bool_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_01_flag_bool_derive[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-v, --verbose
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_01_flag_bool_derive
|
||||
verbose: false
|
||||
|
||||
$ 03_01_flag_bool_derive --verbose
|
||||
verbose: true
|
||||
|
||||
$ 03_01_flag_bool_derive --verbose --verbose
|
||||
? failed
|
||||
error: the argument '--verbose' cannot be used multiple times
|
||||
|
||||
Usage: 03_01_flag_bool_derive[EXE] [OPTIONS]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_derive/03_01_flag_bool.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_derive/03_01_flag_bool.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(short, long)]
|
||||
verbose: bool,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("verbose: {:?}", cli.verbose);
|
||||
}
|
21
vendor/clap/examples/tutorial_derive/03_01_flag_count.md
vendored
Normal file
21
vendor/clap/examples/tutorial_derive/03_01_flag_count.md
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
```console
|
||||
$ 03_01_flag_count_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_01_flag_count_derive[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-v, --verbose...
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_01_flag_count_derive
|
||||
verbose: 0
|
||||
|
||||
$ 03_01_flag_count_derive --verbose
|
||||
verbose: 1
|
||||
|
||||
$ 03_01_flag_count_derive --verbose --verbose
|
||||
verbose: 2
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_derive/03_01_flag_count.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_derive/03_01_flag_count.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(short, long, action = clap::ArgAction::Count)]
|
||||
verbose: u8,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("verbose: {:?}", cli.verbose);
|
||||
}
|
30
vendor/clap/examples/tutorial_derive/03_02_option.md
vendored
Normal file
30
vendor/clap/examples/tutorial_derive/03_02_option.md
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
```console
|
||||
$ 03_02_option_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_02_option_derive[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-n, --name <NAME>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_02_option_derive
|
||||
name: None
|
||||
|
||||
$ 03_02_option_derive --name bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_derive --name=bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_derive -n bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_derive -n=bob
|
||||
name: Some("bob")
|
||||
|
||||
$ 03_02_option_derive -nbob
|
||||
name: Some("bob")
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_derive/03_02_option.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_derive/03_02_option.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(short, long)]
|
||||
name: Option<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("name: {:?}", cli.name.as_deref());
|
||||
}
|
30
vendor/clap/examples/tutorial_derive/03_02_option_mult.md
vendored
Normal file
30
vendor/clap/examples/tutorial_derive/03_02_option_mult.md
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
```console
|
||||
$ 03_02_option_mult_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_02_option_mult_derive[EXE] [OPTIONS]
|
||||
|
||||
Options:
|
||||
-n, --name <NAME>
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_02_option_mult_derive
|
||||
name: []
|
||||
|
||||
$ 03_02_option_mult_derive --name bob
|
||||
name: ["bob"]
|
||||
|
||||
$ 03_02_option_mult_derive --name=bob
|
||||
name: ["bob"]
|
||||
|
||||
$ 03_02_option_mult_derive -n bob
|
||||
name: ["bob"]
|
||||
|
||||
$ 03_02_option_mult_derive -n=bob
|
||||
name: ["bob"]
|
||||
|
||||
$ 03_02_option_mult_derive -nbob
|
||||
name: ["bob"]
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_derive/03_02_option_mult.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_derive/03_02_option_mult.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(short, long)]
|
||||
name: Vec<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("name: {:?}", cli.name);
|
||||
}
|
20
vendor/clap/examples/tutorial_derive/03_03_positional.md
vendored
Normal file
20
vendor/clap/examples/tutorial_derive/03_03_positional.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
```console
|
||||
$ 03_03_positional_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_03_positional_derive[EXE] [NAME]
|
||||
|
||||
Arguments:
|
||||
[NAME]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_03_positional_derive
|
||||
name: None
|
||||
|
||||
$ 03_03_positional_derive bob
|
||||
name: Some("bob")
|
||||
|
||||
```
|
13
vendor/clap/examples/tutorial_derive/03_03_positional.rs
vendored
Normal file
13
vendor/clap/examples/tutorial_derive/03_03_positional.rs
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
name: Option<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("name: {:?}", cli.name.as_deref());
|
||||
}
|
23
vendor/clap/examples/tutorial_derive/03_03_positional_mult.md
vendored
Normal file
23
vendor/clap/examples/tutorial_derive/03_03_positional_mult.md
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
```console
|
||||
$ 03_03_positional_mult_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_03_positional_mult_derive[EXE] [NAME]...
|
||||
|
||||
Arguments:
|
||||
[NAME]...
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_03_positional_mult_derive
|
||||
name: []
|
||||
|
||||
$ 03_03_positional_mult_derive bob
|
||||
name: ["bob"]
|
||||
|
||||
$ 03_03_positional_mult_derive bob john
|
||||
name: ["bob", "john"]
|
||||
|
||||
```
|
13
vendor/clap/examples/tutorial_derive/03_03_positional_mult.rs
vendored
Normal file
13
vendor/clap/examples/tutorial_derive/03_03_positional_mult.rs
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
name: Vec<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("name: {:?}", cli.name);
|
||||
}
|
60
vendor/clap/examples/tutorial_derive/03_04_subcommands.md
vendored
Normal file
60
vendor/clap/examples/tutorial_derive/03_04_subcommands.md
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
```console
|
||||
$ 03_04_subcommands_derive help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_04_subcommands_derive[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
add Adds files to myapp
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_04_subcommands_derive help add
|
||||
Adds files to myapp
|
||||
|
||||
Usage: 03_04_subcommands_derive[EXE] add [NAME]
|
||||
|
||||
Arguments:
|
||||
[NAME]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_04_subcommands_derive add bob
|
||||
'myapp add' was used, name is: Some("bob")
|
||||
|
||||
```
|
||||
|
||||
When specifying commands with `command: Commands`, they are required.
|
||||
Alternatively, you could do `command: Option<Commands>` to make it optional.
|
||||
```console
|
||||
$ 03_04_subcommands_derive
|
||||
? failed
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_04_subcommands_derive[EXE] <COMMAND>
|
||||
|
||||
Commands:
|
||||
add Adds files to myapp
|
||||
help Print this message or the help of the given subcommand(s)
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
```
|
||||
|
||||
Since we specified [`#[command(propagate_version = true)]`][crate::Command::propagate_version],
|
||||
the `--version` flag is available in all subcommands:
|
||||
```console
|
||||
$ 03_04_subcommands_derive --version
|
||||
clap [..]
|
||||
|
||||
$ 03_04_subcommands_derive add --version
|
||||
clap-add [..]
|
||||
|
||||
```
|
27
vendor/clap/examples/tutorial_derive/03_04_subcommands.rs
vendored
Normal file
27
vendor/clap/examples/tutorial_derive/03_04_subcommands.rs
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
use clap::{Parser, Subcommand};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
#[command(propagate_version = true)]
|
||||
struct Cli {
|
||||
#[command(subcommand)]
|
||||
command: Commands,
|
||||
}
|
||||
|
||||
#[derive(Subcommand)]
|
||||
enum Commands {
|
||||
/// Adds files to myapp
|
||||
Add { name: Option<String> },
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
// You can check for the existence of subcommands, and if found use their
|
||||
// matches just as you would the top level cmd
|
||||
match &cli.command {
|
||||
Commands::Add { name } => {
|
||||
println!("'myapp add' was used, name is: {name:?}")
|
||||
}
|
||||
}
|
||||
}
|
32
vendor/clap/examples/tutorial_derive/03_04_subcommands_alt.rs
vendored
Normal file
32
vendor/clap/examples/tutorial_derive/03_04_subcommands_alt.rs
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
use clap::{Args, Parser, Subcommand};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
#[command(propagate_version = true)]
|
||||
struct Cli {
|
||||
#[command(subcommand)]
|
||||
command: Commands,
|
||||
}
|
||||
|
||||
#[derive(Subcommand)]
|
||||
enum Commands {
|
||||
/// Adds files to myapp
|
||||
Add(AddArgs),
|
||||
}
|
||||
|
||||
#[derive(Args)]
|
||||
struct AddArgs {
|
||||
name: Option<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
// You can check for the existence of subcommands, and if found use their
|
||||
// matches just as you would the top level cmd
|
||||
match &cli.command {
|
||||
Commands::Add(name) => {
|
||||
println!("'myapp add' was used, name is: {:?}", name.name)
|
||||
}
|
||||
}
|
||||
}
|
20
vendor/clap/examples/tutorial_derive/03_05_default_values.md
vendored
Normal file
20
vendor/clap/examples/tutorial_derive/03_05_default_values.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
```console
|
||||
$ 03_05_default_values_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 03_05_default_values_derive[EXE] [PORT]
|
||||
|
||||
Arguments:
|
||||
[PORT] [default: 2020]
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 03_05_default_values_derive
|
||||
port: 2020
|
||||
|
||||
$ 03_05_default_values_derive 22
|
||||
port: 22
|
||||
|
||||
```
|
14
vendor/clap/examples/tutorial_derive/03_05_default_values.rs
vendored
Normal file
14
vendor/clap/examples/tutorial_derive/03_05_default_values.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(default_value_t = 2020)]
|
||||
port: u16,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
println!("port: {:?}", cli.port);
|
||||
}
|
47
vendor/clap/examples/tutorial_derive/04_01_enum.md
vendored
Normal file
47
vendor/clap/examples/tutorial_derive/04_01_enum.md
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
```console
|
||||
$ 04_01_enum_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_01_enum_derive[EXE] <MODE>
|
||||
|
||||
Arguments:
|
||||
<MODE>
|
||||
What mode to run the program in
|
||||
|
||||
Possible values:
|
||||
- fast: Run swiftly
|
||||
- slow: Crawl slowly but steadily
|
||||
|
||||
Options:
|
||||
-h, --help
|
||||
Print help (see a summary with '-h')
|
||||
|
||||
-V, --version
|
||||
Print version
|
||||
|
||||
$ 04_01_enum_derive -h
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_01_enum_derive[EXE] <MODE>
|
||||
|
||||
Arguments:
|
||||
<MODE> What mode to run the program in [possible values: fast, slow]
|
||||
|
||||
Options:
|
||||
-h, --help Print help (see more with '--help')
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_01_enum_derive fast
|
||||
Hare
|
||||
|
||||
$ 04_01_enum_derive slow
|
||||
Tortoise
|
||||
|
||||
$ 04_01_enum_derive medium
|
||||
? failed
|
||||
error: invalid value 'medium' for '<MODE>'
|
||||
[possible values: fast, slow]
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
32
vendor/clap/examples/tutorial_derive/04_01_enum.rs
vendored
Normal file
32
vendor/clap/examples/tutorial_derive/04_01_enum.rs
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
use clap::{Parser, ValueEnum};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Cli {
|
||||
/// What mode to run the program in
|
||||
#[arg(value_enum)]
|
||||
mode: Mode,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
|
||||
enum Mode {
|
||||
/// Run swiftly
|
||||
Fast,
|
||||
/// Crawl slowly but steadily
|
||||
///
|
||||
/// This paragraph is ignored because there is no long help text for possible values.
|
||||
Slow,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
match cli.mode {
|
||||
Mode::Fast => {
|
||||
println!("Hare");
|
||||
}
|
||||
Mode::Slow => {
|
||||
println!("Tortoise");
|
||||
}
|
||||
}
|
||||
}
|
29
vendor/clap/examples/tutorial_derive/04_02_parse.md
vendored
Normal file
29
vendor/clap/examples/tutorial_derive/04_02_parse.md
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
```console
|
||||
$ 04_02_parse_derive --help
|
||||
A simple to use, efficient, and full-featured Command Line Argument Parser
|
||||
|
||||
Usage: 04_02_parse_derive[EXE] <PORT>
|
||||
|
||||
Arguments:
|
||||
<PORT> Network port to use
|
||||
|
||||
Options:
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
|
||||
$ 04_02_parse_derive 22
|
||||
PORT = 22
|
||||
|
||||
$ 04_02_parse_derive foobar
|
||||
? failed
|
||||
error: invalid value 'foobar' for '<PORT>': invalid digit found in string
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
$ 04_02_parse_derive 0
|
||||
? failed
|
||||
error: invalid value '0' for '<PORT>': 0 is not in 1..=65535
|
||||
|
||||
For more information, try '--help'.
|
||||
|
||||
```
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user