structopt-derive
Parse command line argument by defining a struct, derive crate.
0.4.18
87M downloads/mo
#884 most downloaded on crates.io
TeXitoi/structopt
What this package is like to depend on
Last release 5 years ago
no release in 18 months
Release timing varies
gaps range from 2 weeks to 7 months
Most releases are documented
notes for 35 of 55 stable releases
2 versions withdrawn
withdrawn after publishing
10 years old
57 releases · first in 2017
0 releases in the last 12 months
see the full history below
Release timeline
57 releases · Feb 2017 to Oct 2021Releases
latest 57-
0.4.1818 Oct 2021Release notes
Open source →Bug Fixes
- usage display required args in usage, even if only required by others (1b7316d4)
Features
- subcommands properly list subcommands in help and usage (4ee02344)
-
0.4.1718 Oct 2021 -
0.4.1630 Aug 2021Release notes
Open source →Bug Fixes
- option fix bug with option occurrence values (9af52e93)
- tests fix testing script bug and formatting (d8f03a55)
Features
- arg allow lifetimes other than 'static in arguments (9e8c1fb9)
<!-- next-url --> [Unreleased]: https://github.com/clap-rs/clap/compare/v4.6.6...HEAD [4.6.6]: https://github.com/clap-rs/clap/compare/v4.6.5...v4.6.6 [4.6.5]: https://github.com/clap-rs/clap/compare/v4.6.4...v4.6.5 [4.6.4]: https://github.com/clap-rs/clap/compare/v4.6.3...v4.6.4 [4.6.3]: https://github.com/clap-rs/clap/compare/v4.6.2...v4.6.3 [4.6.2]: https://github.com/clap-rs/clap/compare/v4.6.1...v4.6.2 [4.6.1]: https://github.com/clap-rs/clap/compare/v4.6.0...v4.6.1 [4.6.0]: https://github.com/clap-rs/clap/compare/v4.5.61...v4.6.0 [4.5.61]: https://github.com/clap-rs/clap/compare/v4.5.60...v4.5.61 [4.5.60]: https://github.com/clap-rs/clap/compare/v4.5.59...v4.5.60 [4.5.59]: https://github.com/clap-rs/clap/compare/v4.5.58...v4.5.59 [4.5.58]: https://github.com/clap-rs/clap/compare/v4.5.57...v4.5.58 [4.5.57]: https://github.com/clap-rs/clap/compare/v4.5.56...v4.5.57 [4.5.56]: https://github.com/clap-rs/clap/compare/v4.5.55...v4.5.56 [4.5.55]: https://github.com/clap-rs/clap/compare/v4.5.54...v4.5.55 [4.5.54]: https://github.com/clap-rs/clap/compare/v4.5.53...v4.5.54 [4.5.53]: https://github.com/clap-rs/clap/compare/v4.5.52...v4.5.53 [4.5.52]: https://github.com/clap-rs/clap/compare/v4.5.51...v4.5.52 [4.5.51]: https://github.com/clap-rs/clap/compare/v4.5.50...v4.5.51 [4.5.50]: https://github.com/clap-rs/clap/compare/v4.5.49...v4.5.50 [4.5.49]: https://github.com/clap-rs/clap/compare/v4.5.48...v4.5.49 [4.5.48]: https://github.com/clap-rs/clap/compare/v4.5.47...v4.5.48 [4.5.47]: https://github.com/clap-rs/clap/compare/v4.5.46...v4.5.47 [4.5.46]: https://github.com/clap-rs/clap/compare/v4.5.45...v4.5.46 [4.5.45]: https://github.com/clap-rs/clap/compare/v4.5.44...v4.5.45 [4.5.44]: https://github.com/clap-rs/clap/compare/v4.5.43...v4.5.44 [4.5.43]: https://github.com/clap-rs/clap/compare/v4.5.42...v4.5.43 [4.5.42]: https://github.com/clap-rs/clap/compare/v4.5.41...v4.5.42 [4.5.41]: https://github.com/clap-rs/clap/compare/v4.5.40...v4.5.41 [4.5.40]: https://github.com/clap-rs/clap/compare/v4.5.39...v4.5.40 [4.5.39]: https://github.com/clap-rs/clap/compare/v4.5.38...v4.5.39 [4.5.38]: https://github.com/clap-rs/clap/compare/v4.5.37...v4.5.38 [4.5.37]: https://github.com/clap-rs/clap/compare/v4.5.36...v4.5.37 [4.5.36]: https://github.com/clap-rs/clap/compare/v4.5.35...v4.5.36 [4.5.35]: https://github.com/clap-rs/clap/compare/v4.5.34...v4.5.35 [4.5.34]: https://github.com/clap-rs/clap/compare/v4.5.33...v4.5.34 [4.5.33]: https://github.com/clap-rs/clap/compare/v4.5.32...v4.5.33 [4.5.32]: https://github.com/clap-rs/clap/compare/v4.5.31...v4.5.32 [4.5.31]: https://github.com/clap-rs/clap/compare/v4.5.30...v4.5.31 [4.5.30]: https://github.com/clap-rs/clap/compare/v4.5.29...v4.5.30 [4.5.29]: https://github.com/clap-rs/clap/compare/v4.5.28...v4.5.29 [4.5.28]: https://github.com/clap-rs/clap/compare/v4.5.27...v4.5.28 [4.5.27]: https://github.com/clap-rs/clap/compare/v4.5.26...v4.5.27 [4.5.26]: https://github.com/clap-rs/clap/compare/v4.5.25...v4.5.26 [4.5.25]: https://github.com/clap-rs/clap/compare/v4.5.24...v4.5.25 [4.5.24]: https://github.com/clap-rs/clap/compare/v4.5.23...v4.5.24 [4.5.23]: https://github.com/clap-rs/clap/compare/v4.5.22...v4.5.23 [4.5.22]: https://github.com/clap-rs/clap/compare/v4.5.21...v4.5.22 [4.5.21]: https://github.com/clap-rs/clap/compare/v4.5.20...v4.5.21 [4.5.20]: https://github.com/clap-rs/clap/compare/v4.5.19...v4.5.20 [4.5.19]: https://github.com/clap-rs/clap/compare/v4.5.18...v4.5.19 [4.5.18]: https://github.com/clap-rs/clap/compare/v4.5.17...v4.5.18 [4.5.17]: https://github.com/clap-rs/clap/compare/v4.5.16...v4.5.17 [4.5.16]: https://github.com/clap-rs/clap/compare/v4.5.15...v4.5.16 [4.5.15]: https://github.com/clap-rs/clap/compare/v4.5.14...v4.5.15 [4.5.14]: https://github.com/clap-rs/clap/compare/v4.5.13...v4.5.14 [4.5.13]: https://github.com/clap-rs/clap/compare/v4.5.12...v4.5.13 [4.5.12]: https://github.com/clap-rs/clap/compare/v4.5.11...v4.5.12 [4.5.11]: https://github.com/clap-rs/clap/compare/v4.5.10...v4.5.11 [4.5.10]: https://github.com/clap-rs/clap/compare/v4.5.9...v4.5.10 [4.5.9]: https://github.com/clap-rs/clap/compare/v4.5.8...v4.5.9 [4.5.8]: https://github.com/clap-rs/clap/compare/v4.5.7...v4.5.8 [4.5.7]: https://github.com/clap-rs/clap/compare/v4.5.6...v4.5.7 [4.5.6]: https://github.com/clap-rs/clap/compare/v4.5.5...v4.5.6 [4.5.5]: https://github.com/clap-rs/clap/compare/v4.5.4...v4.5.5 [4.5.4]: https://github.com/clap-rs/clap/compare/v4.5.3...v4.5.4 [4.5.3]: https://github.com/clap-rs/clap/compare/v4.5.2...v4.5.3 [4.5.2]: https://github.com/clap-rs/clap/compare/v4.5.1...v4.5.2 [4.5.1]: https://github.com/clap-rs/clap/compare/v4.5.0...v4.5.1 [4.5.0]: https://github.com/clap-rs/clap/compare/v4.4.18...v4.5.0 [4.4.18]: https://github.com/clap-rs/clap/compare/v4.4.17...v4.4.18 [4.4.17]: https://github.com/clap-rs/clap/compare/v4.4.16...v4.4.17 [4.4.16]: https://github.com/clap-rs/clap/compare/v4.4.15...v4.4.16 [4.4.15]: https://github.com/clap-rs/clap/compare/v4.4.14...v4.4.15 [4.4.14]: https://github.com/clap-rs/clap/compare/v4.4.13...v4.4.14 [4.4.13]: https://github.com/clap-rs/clap/compare/v4.4.12...v4.4.13 [4.4.12]: https://github.com/clap-rs/clap/compare/v4.4.11...v4.4.12 [4.4.11]: https://github.com/clap-rs/clap/compare/v4.4.10...v4.4.11 [4.4.10]: https://github.com/clap-rs/clap/compare/v4.4.9...v4.4.10 [4.4.9]: https://github.com/clap-rs/clap/compare/v4.4.8...v4.4.9 [4.4.8]: https://github.com/clap-rs/clap/compare/v4.4.7...v4.4.8 [4.4.7]: https://github.com/clap-rs/clap/compare/v4.4.6...v4.4.7 [4.4.6]: https://github.com/clap-rs/clap/compare/v4.4.5...v4.4.6 [4.4.5]: https://github.com/clap-rs/clap/compare/v4.4.4...v4.4.5 [4.4.4]: https://github.com/clap-rs/clap/compare/v4.4.3...v4.4.4 [4.4.3]: https://github.com/clap-rs/clap/compare/v4.4.2...v4.4.3 [4.4.2]: https://github.com/clap-rs/clap/compare/v4.4.1...v4.4.2 [4.4.1]: https://github.com/clap-rs/clap/compare/v4.4.0...v4.4.1 [4.4.0]: https://github.com/clap-rs/clap/compare/v4.3.24...v4.4.0 [4.3.24]: https://github.com/clap-rs/clap/compare/v4.3.23...v4.3.24 [4.3.23]: https://github.com/clap-rs/clap/compare/v4.3.22...v4.3.23 [4.3.22]: https://github.com/clap-rs/clap/compare/v4.3.21...v4.3.22 [4.3.21]: https://github.com/clap-rs/clap/compare/v4.3.20...v4.3.21 [4.3.20]: https://github.com/clap-rs/clap/compare/v4.3.19...v4.3.20 [4.3.19]: https://github.com/clap-rs/clap/compare/v4.3.18...v4.3.19 [4.3.18]: https://github.com/clap-rs/clap/compare/v4.3.17...v4.3.18 [4.3.17]: https://github.com/clap-rs/clap/compare/v4.3.16...v4.3.17 [4.3.16]: https://github.com/clap-rs/clap/compare/v4.3.15...v4.3.16 [4.3.15]: https://github.com/clap-rs/clap/compare/v4.3.14...v4.3.15 [4.3.14]: https://github.com/clap-rs/clap/compare/v4.3.13...v4.3.14 [4.3.13]: https://github.com/clap-rs/clap/compare/v4.3.12...v4.3.13 [4.3.12]: https://github.com/clap-rs/clap/compare/v4.3.11...v4.3.12 [4.3.11]: https://github.com/clap-rs/clap/compare/v4.3.10...v4.3.11 [4.3.10]: https://github.com/clap-rs/clap/compare/v4.3.9...v4.3.10 [4.3.9]: https://github.com/clap-rs/clap/compare/v4.3.8...v4.3.9 [4.3.8]: https://github.com/clap-rs/clap/compare/v4.3.7...v4.3.8 [4.3.7]: https://github.com/clap-rs/clap/compare/v4.3.6...v4.3.7 [4.3.6]: https://github.com/clap-rs/clap/compare/v4.3.5...v4.3.6 [4.3.5]: https://github.com/clap-rs/clap/compare/v4.3.4...v4.3.5 [4.3.4]: https://github.com/clap-rs/clap/compare/v4.3.3...v4.3.4 [4.3.3]: https://github.com/clap-rs/clap/compare/v4.3.2...v4.3.3 [4.3.2]: https://github.com/clap-rs/clap/compare/v4.3.1...v4.3.2 [4.3.1]: https://github.com/clap-rs/clap/compare/v4.3.0...v4.3.1 [4.3.0]: https://github.com/clap-rs/clap/compare/v4.2.7...v4.3.0 [4.2.7]: https://github.com/clap-rs/clap/compare/v4.2.6...v4.2.7 [4.2.6]: https://github.com/clap-rs/clap/compare/v4.2.5...v4.2.6 [4.2.5]: https://github.com/clap-rs/clap/compare/v4.2.4...v4.2.5 [4.2.4]: https://github.com/clap-rs/clap/compare/v4.2.3...v4.2.4 [4.2.3]: https://github.com/clap-rs/clap/compare/v4.2.2...v4.2.3 [4.2.2]: https://github.com/clap-rs/clap/compare/v4.2.1...v4.2.2 [4.2.1]: https://github.com/clap-rs/clap/compare/v4.2.0...v4.2.1 [4.2.0]: https://github.com/clap-rs/clap/compare/v4.1.14...v4.2.0 [4.1.14]: https://github.com/clap-rs/clap/compare/v4.1.13...v4.1.14 [4.1.13]: https://github.com/clap-rs/clap/compare/v4.1.12...v4.1.13 [4.1.12]: https://github.com/clap-rs/clap/compare/v4.1.11...v4.1.12 [4.1.11]: https://github.com/clap-rs/clap/compare/v4.1.10...v4.1.11 [4.1.10]: https://github.com/clap-rs/clap/compare/v4.1.9...v4.1.10 [4.1.9]: https://github.com/clap-rs/clap/compare/v4.1.8...v4.1.9 [4.1.8]: https://github.com/clap-rs/clap/compare/v4.1.7...v4.1.8 [4.1.7]: https://github.com/clap-rs/clap/compare/v4.1.6...v4.1.7 [4.1.6]: https://github.com/clap-rs/clap/compare/v4.1.5...v4.1.6 [4.1.5]: https://github.com/clap-rs/clap/compare/v4.1.4...v4.1.5 [4.1.4]: https://github.com/clap-rs/clap/compare/v4.1.3...v4.1.4 [4.1.3]: https://github.com/clap-rs/clap/compare/v4.1.2...v4.1.3 [4.1.2]: https://github.com/clap-rs/clap/compare/v4.1.1...v4.1.2 [4.1.1]: https://github.com/clap-rs/clap/compare/v4.1.0...v4.1.1 [4.1.0]: https://github.com/clap-rs/clap/compare/v4.0.32...v4.1.0 [4.0.32]: https://github.com/clap-rs/clap/compare/v4.0.31...v4.0.32 [4.0.31]: https://github.com/clap-rs/clap/compare/v4.0.30...v4.0.31 [4.0.30]: https://github.com/clap-rs/clap/compare/v4.0.29...v4.0.30 [4.0.29]: https://github.com/clap-rs/clap/compare/v4.0.28...v4.0.29 [4.0.28]: https://github.com/clap-rs/clap/compare/v4.0.27...v4.0.28 [4.0.27]: https://github.com/clap-rs/clap/compare/v4.0.26...v4.0.27 [4.0.26]: https://github.com/clap-rs/clap/compare/v4.0.25...v4.0.26 [4.0.25]: https://github.com/clap-rs/clap/compare/v4.0.24...v4.0.25 [4.0.24]: https://github.com/clap-rs/clap/compare/v4.0.23...v4.0.24 [4.0.23]: https://github.com/clap-rs/clap/compare/v4.0.22...v4.0.23 [4.0.22]: https://github.com/clap-rs/clap/compare/v4.0.21...v4.0.22 [4.0.21]: https://github.com/clap-rs/clap/compare/v4.0.20...v4.0.21 [4.0.20]: https://github.com/clap-rs/clap/compare/v4.0.19...v4.0.20 [4.0.19]: https://github.com/clap-rs/clap/compare/v4.0.18...v4.0.19 [4.0.18]: https://github.com/clap-rs/clap/compare/v4.0.17...v4.0.18 [4.0.17]: https://github.com/clap-rs/clap/compare/v4.0.16...v4.0.17 [4.0.16]: https://github.com/clap-rs/clap/compare/v4.0.15...v4.0.16 [4.0.15]: https://github.com/clap-rs/clap/compare/v4.0.14...v4.0.15 [4.0.14]: https://github.com/clap-rs/clap/compare/v4.0.13...v4.0.14 [4.0.13]: https://github.com/clap-rs/clap/compare/v4.0.12...v4.0.13 [4.0.12]: https://github.com/clap-rs/clap/compare/v4.0.11...v4.0.12 [4.0.11]: https://github.com/clap-rs/clap/compare/v4.0.10...v4.0.11 [4.0.10]: https://github.com/clap-rs/clap/compare/v4.0.9...v4.0.10 [4.0.9]: https://github.com/clap-rs/clap/compare/v4.0.8...v4.0.9 [4.0.8]: https://github.com/clap-rs/clap/compare/v4.0.7...v4.0.8 [4.0.7]: https://github.com/clap-rs/clap/compare/v4.0.6...v4.0.7 [4.0.6]: https://github.com/clap-rs/clap/compare/v4.0.5...v4.0.6 [4.0.5]: https://github.com/clap-rs/clap/compare/v4.0.4...v4.0.5 [4.0.4]: https://github.com/clap-rs/clap/compare/v4.0.3...v4.0.4 [4.0.3]: https://github.com/clap-rs/clap/compare/v4.0.2...v4.0.3 [4.0.2]: https://github.com/clap-rs/clap/compare/v4.0.1...v4.0.2 [4.0.1]: https://github.com/clap-rs/clap/compare/v4.0.0...v4.0.1 [4.0.0]: https://github.com/clap-rs/clap/compare/v3.2.18...v4.0.0 [3.2.18]: https://github.com/clap-rs/clap/compare/v3.2.17...v3.2.18 [3.2.17]: https://github.com/clap-rs/clap/compare/v3.2.16...v3.2.17 [3.2.16]: https://github.com/clap-rs/clap/compare/v3.2.15...v3.2.16 [3.2.15]: https://github.com/clap-rs/clap/compare/v3.2.14...v3.2.15 [3.2.14]: https://github.com/clap-rs/clap/compare/v3.2.13...v3.2.14 [3.2.13]: https://github.com/clap-rs/clap/compare/v3.2.12...v3.2.13 [3.2.12]: https://github.com/clap-rs/clap/compare/v3.2.11...v3.2.12 [3.2.11]: https://github.com/clap-rs/clap/compare/v3.2.10...v3.2.11 [3.2.10]: https://github.com/clap-rs/clap/compare/v3.2.8...v3.2.10 [3.2.8]: https://github.com/clap-rs/clap/compare/v3.2.7...v3.2.8 [3.2.7]: https://github.com/clap-rs/clap/compare/v3.2.6...v3.2.7 [3.2.6]: https://github.com/clap-rs/clap/compare/v3.2.5...v3.2.6 [3.2.5]: https://github.com/clap-rs/clap/compare/v3.2.4...v3.2.5 [3.2.4]: https://github.com/clap-rs/clap/compare/v3.2.3...v3.2.4 [3.2.3]: https://github.com/clap-rs/clap/compare/v3.2.2...v3.2.3 [3.2.2]: https://github.com/clap-rs/clap/compare/v3.2.1...v3.2.2 [3.2.1]: https://github.com/clap-rs/clap/compare/v3.2.0...v3.2.1 [3.2.0]: https://github.com/clap-rs/clap/compare/v3.1.18...v3.2.0 [3.1.18]: https://github.com/clap-rs/clap/compare/v3.1.17...v3.1.18 [3.1.17]: https://github.com/clap-rs/clap/compare/v3.1.16...v3.1.17 [3.1.16]: https://github.com/clap-rs/clap/compare/v3.1.15...v3.1.16 [3.1.15]: https://github.com/clap-rs/clap/compare/v3.1.14...v3.1.15 [3.1.14]: https://github.com/clap-rs/clap/compare/v3.1.13...v3.1.14 [3.1.13]: https://github.com/clap-rs/clap/compare/v3.1.12...v3.1.13 [3.1.12]: https://github.com/clap-rs/clap/compare/v3.1.11...v3.1.12 [3.1.11]: https://github.com/clap-rs/clap/compare/v3.1.10...v3.1.11 [3.1.10]: https://github.com/clap-rs/clap/compare/v3.1.9...v3.1.10 [3.1.9]: https://github.com/clap-rs/clap/compare/v3.1.8...v3.1.9 [3.1.8]: https://github.com/clap-rs/clap/compare/v3.1.7...v3.1.8 [3.1.7]: https://github.com/clap-rs/clap/compare/v3.1.6...v3.1.7 [3.1.6]: https://github.com/clap-rs/clap/compare/v3.1.5...v3.1.6 [3.1.5]: https://github.com/clap-rs/clap/compare/v3.1.4...v3.1.5 [3.1.4]: https://github.com/clap-rs/clap/compare/v3.1.3...v3.1.4 [3.1.3]: https://github.com/clap-rs/clap/compare/v3.1.2...v3.1.3 [3.1.2]: https://github.com/clap-rs/clap/compare/v3.1.1...v3.1.2 [3.1.1]: https://github.com/clap-rs/clap/compare/v3.1.0...v3.1.1 [3.1.0]: https://github.com/clap-rs/clap/compare/v3.0.14...v3.1.0 [3.0.14]: https://github.com/clap-rs/clap/compare/v3.0.13...v3.0.14 [3.0.13]: https://github.com/clap-rs/clap/compare/v3.0.12...v3.0.13 [3.0.12]: https://github.com/clap-rs/clap/compare/v3.0.11...v3.0.12 [3.0.11]: https://github.com/clap-rs/clap/compare/v3.0.10...v3.0.11 [3.0.10]: https://github.com/clap-rs/clap/compare/v3.0.9...v3.0.10 [3.0.9]: https://github.com/clap-rs/clap/compare/v3.0.8...v3.0.9 [3.0.8]: https://github.com/clap-rs/clap/compare/v3.0.7...v3.0.8 [3.0.7]: https://github.com/clap-rs/clap/compare/v3.0.6...v3.0.7 [3.0.6]: https://github.com/clap-rs/clap/compare/v3.0.5...v3.0.6 [3.0.5]: https://github.com/clap-rs/clap/compare/v3.0.4...v3.0.5 [3.0.4]: https://github.com/clap-rs/clap/compare/v3.0.3...v3.0.4 [3.0.3]: https://github.com/clap-rs/clap/compare/v3.0.2...v3.0.3 [3.0.2]: https://github.com/clap-rs/clap/compare/v3.0.1...v3.0.2 [3.0.1]: https://github.com/clap-rs/clap/compare/v3.0.0...v3.0.1 [3.0.0]: https://github.com/clap-rs/clap/compare/v2.34.0...v3.0.0 [2.34.0]: https://github.com/clap-rs/clap/compare/v2.33.4...v2.34.0 [2.33.4]: https://github.com/clap-rs/clap/compare/v2.33.3...v2.33.4 [2.33.3]: https://github.com/clap-rs/clap/compare/v2.33.2...v2.33.3 [2.33.2]: https://github.com/clap-rs/clap/compare/v2.33.1...v2.33.2 [2.33.1]: https://github.com/clap-rs/clap/compare/v2.33.0...v2.33.1 [2.33.0]: https://github.com/clap-rs/clap/compare/v2.32.0...v2.33.0
-
0.4.1504 Jul 2021Nothing published for this version
-
0.4.1430 Nov 2020Nothing published for this version
-
0.4.1312 Oct 2020Nothing published for this version
-
0.4.1208 Oct 2020Nothing published for this version
-
0.4.1123 Sep 2020Nothing published for this version
-
0.4.1025 Aug 2020Nothing published for this version
-
0.4.905 Aug 2020Nothing published for this version
-
0.4.816 Jun 2020Nothing published for this version
-
0.4.722 Apr 2020Nothing published for this version
-
0.4.608 Apr 2020Nothing published for this version
-
0.4.518 Mar 2020Nothing published for this version
-
0.4.401 Mar 2020Nothing published for this version
-
0.4.301 Mar 2020Nothing published for this version
-
0.4.201 Feb 2020Nothing published for this version
-
0.4.119 Jan 2020Nothing published for this version
-
0.4.028 Dec 2019Nothing published for this version
-
0.3.622 Dec 2019 withdrawnRelease notes
Open source →This is unusually big patch release. It contains a number of bugfixes and new features, some of them may theoretically be considered breaking. We did our best to avoid any problems on user's side but, if it wasn't good enough, please file an issue ASAP.
Bugfixes
-
structoptused to treat::path::to::type::Vec<T>asVec<T>special type. This was considered erroneous. (same forOption<T>andbool). Now only exactVec<T>match is a special type. -
#[structopt(version = expr)]whereexpris not a string literal used to get overridden by auto generated.version()call, incorrectly. Now it doesn't. -
Fixed bug with top-level
App::*calls on multiplestructs, see #289. -
Positional
boolargs with no explicit#[structopt(parse(...))]annotation are now prohibited. This couldn't work well anyway, see this example for details. -
Now we've instituted strict priority between doc comments, about, help, and the like. See the documentation.
HUGE THANKS to
@ssokolowfor tidying up our documentation, teaching me English and explaining why our doc used to suck. I promise I'll make the rest of the doc up to your standards... sometime later!
New features
-
Implement
StructOptforBox<impl StructOpt>so from now on you can useBox<T>withflattenandsubcommand(#304).enum Command { #[structopt(name = "version")] PrintVersion, #[structopt(name = "second")] DoSomething { #[structopt(flatten)] config: Box<DoSomethingConfig>, }, #[structopt(name = "first")] DoSomethingElse { #[structopt(flatten)] config: Box<DoSomethingElseConfig>, } } -
Introduced
#[structopt(verbatim_doc_comment)]attribute that keeps line breaks in doc comments, see the documentation. -
Introduced
#[structopt(rename_all_env)]and#[structopt(env)]magical methods so you can derive env var's name from field's name. See the documentation.
Improvements
-
Now we have nice README for our examples, check it out!
-
Some error messages were improved and clarified, thanks for all people involved!
-
-
0.3.522 Nov 2019Release notes
Open source →try_from_strfunctions are now called with a&strinstead of a&String(#282)
-
0.3.408 Nov 2019 -
0.3.310 Oct 2019Release notes
Open source →- Add
from_flagcustom parser to create flags from non-bool types. Fixes #185
- Add
-
0.3.218 Sep 2019Release notes
Open source →structoptdoes not replace:with,inside "author" strings while inside<...>. Fixes #156- Introduced
#[structopt(skip = expr)]syntax.
-
0.3.106 Sep 2019 -
0.3.030 Aug 2019Release notes
Open source →Breaking changes
Bump minimum rustc version to 1.36 by @TeXitoi
Now
rustc1.36 is the minimum compiler version supported bystructopt, it likely won't work with older compilers.Remove "nightly" feature
Once upon a time this feature had been used to enable some of improvements in
proc-macro2crate that were available only on nightly. Nowadays this feature doesn't mean anything so it's now removed.Support optional vectors of arguments for distinguishing between
-o 1 2,-oand no option provided at all by @sphynx (#180).#[derive(StructOpt)] struct Opt { #[structopt(long)] fruit: Option<Vec<String>>, } fn main() { assert_eq!(Opt::from_args(&["test"]), None); assert_eq!(Opt::from_args(&["test", "--fruit"]), Some(vec![])); assert_eq!(Opt::from_args(&["test", "--fruit=apple orange"]), Some(vec!["apple", "orange"])); }If you need to fall back to the old behavior you can use a type alias:
type Something = Vec<String>; #[derive(StructOpt)] struct Opt { #[structopt(long)] fruit: Option<Something>, }Change default case from 'Verbatim' into 'Kebab' by @0ndorio (#202).
structopt0.3 uses field renaming to deduce a name for long options and subcommands.#[derive(StructOpt)] struct Opt { #[structopt(long)] http_addr: String, // will be renamed to `--http-addr` #[structopt(subcommand)] addr_type: AddrType // this adds `addr-type` subcommand }structopt0.2 used to leave things "as is", not renaming anything. If you want to keep old behavior add#[structopt(rename_all = "verbatim")]on top of astruct/enum.Change
version,authorandaboutattributes behavior.Proposed by @TeXitoi (#217), implemented by @CreepySkeleton (#229).
structopthave been deducingversion,author, andaboutproperties fromCargo.tomlfor a long time (more accurately, fromCARGO_PKG_...environment variables). But many users found this behavior somewhat confusing, and a hack was added to cancel out this behavior:#[structopt(author = "")].In
structopt0.3 this has changed.authorandaboutare no longer deduced by default. You should use#[structopt(author, about)]to explicitly requeststructoptto deduce them.- Contrary,
versionis still deduced by default. You can use#[structopt(no_version)]to cancel it out. #[structopt(author = "", about = "", version = "")]is no longer a valid syntax and will trigger an error.#[structopt(version = "version", author = "author", about = "about")]syntax stays unaffected by this changes.
Raw attributes are removed (#198) by @sphynx
In
structopt0.2 you were able to use any method fromclap::Appandclap::Argvia raw attribute:#[structopt(raw(method_name = "arg"))]. This syntax was kind of awkward.#[derive(StructOpt, Debug)] #[structopt(raw( global_settings = "&[AppSettings::ColoredHelp, AppSettings::VersionlessSubcommands]" ))] struct Opt { #[structopt(short = "l", long = "level", raw(aliases = r#"&["set-level", "lvl"]"#))] level: Vec<String>, }Raw attributes were removed in 0.3. Now you can use any method from
AppandArgdirectly:#[derive(StructOpt)] #[structopt(global_settings(&[AppSettings::ColoredHelp, AppSettings::VersionlessSubcommands]))] struct Opt { #[structopt(short = "l", long = "level", aliases(&["set-level", "lvl"]))] level: Vec<String>, }Improvements
Support skipping struct fields
Proposed by @Morganamilo in (#174) implemented by @sphynx in (#213).
Sometimes you want to include some fields in your
StructOptstructthat are not options andclapshould know nothing about them. Instructopt0.3 it's possible via the#[structopt(skip)]attribute. The field in question will be assigned withDefault::default()value.#[derive(StructOpt)] struct Opt { #[structopt(short, long)] speed: f32, car: String, // this field should not generate any arguments #[structopt(skip)] meta: Vec<u64> }Add optional feature to support
pawby @gameldar (#187)Significantly improve error reporting by @CreepySkeleton (#225)
Now (almost) every error message points to the location it originates from:
error: default_value is meaningless for bool --> $DIR/bool_default_value.rs:14:24 | 14 | #[structopt(short, default_value = true)] | ^^^^^^^^^^^^^ -
0.2.1826 Jun 2019Nothing published for this version
-
0.2.1701 Jun 2019 withdrawnNothing published for this version
-
0.2.1629 May 2019Release notes
Open source →Support optional options with optional argument, allowing
cmd [--opt[=value]]by @sphynx (#188)Sometimes you want to represent an optional option that optionally takes an argument, i.e
[--opt[=value]]. This is represented byOption<Option<T>>#[derive(StructOpt)] struct Opt { #[structopt(long)] fruit: Option<Option<String>>, } fn main() { assert_eq!(Opt::from_args(&["test"]), None); assert_eq!(Opt::from_args(&["test", "--fruit"]), Some(None)); assert_eq!(Opt::from_args(&["test", "--fruit=apple"]), Some("apple")); } -
0.2.1508 Mar 2019 -
0.2.1410 Dec 2018 -
0.2.1301 Nov 2018 -
0.2.1211 Oct 2018 -
0.2.1105 Oct 2018 -
0.2.1007 Jun 2018 -
0.2.905 Jun 2018Release notes
Open source →- Fix a bug when using
flattenby @fbenkstein - Update syn, quote and proc_macro2 by @TeXitoi
- Fix a regression when there is multiple authors by @windwardly
- Fix a bug when using
-
0.2.828 Apr 2018Release notes
Open source →- Add
StructOpt::from_iter_safe(), which returns anErrorinstead of killing the program when it fails to parse, or parses one of the short-circuiting flags. (#98 by @quodlibetor) - Allow users to enable
clapfeatures independently by @Kerollmops - Fix a bug when flattening an enum (#103 by @TeXitoi
- Add
-
0.2.712 Apr 2018Release notes
Open source →- Add flattening, the insertion of options of another StructOpt struct into another (#92) by @birkenfeld
- Fail compilation when using
default_valueorrequiredwithOption(#88) by @Kerollmops
-
0.2.631 Mar 2018 -
0.2.507 Mar 2018Release notes
Open source →- Work around breakage when
proc-macro2's nightly feature is enabled. (#77 and proc-macro2#67) by @fitzgen
- Work around breakage when
-
0.2.425 Feb 2018 -
0.2.316 Feb 2018Release notes
Open source →- An empty line in a doc comment will result in a double linefeed in the generated about/help call by @TeXitoi
-
0.2.212 Feb 2018 -
0.2.111 Feb 2018 -
0.2.010 Feb 2018Release notes
Open source →Breaking changes
Don't special case
u64by @SergioBenitezIf you are using a
u64in your struct to get the number of occurrence of a flag, you should now addparse(from_occurrences)on the flag.For example
#[structopt(short = "v", long = "verbose")] verbose: u64,must be changed by
#[structopt(short = "v", long = "verbose", parse(from_occurrences))] verbose: u64,This feature was surprising as shown in #30. Using the
parsefeature seems much more natural.Change the signature of
Structopt::from_clapto take its argument by reference by @TeXitoiThere was no reason to take the argument by value. Most of the StructOpt users will not be impacted by this change. If you are using
StructOpt::from_clap, just add a&before the argument.Fail if attributes are not used by @TeXitoi
StructOpt was quite fuzzy in its attribute parsing: it was only searching for interesting things, e. g. something like
#[structopt(foo(bar))]was accepted but not used. It now fails the compilation.You should have nothing to do here. This breaking change may highlight some misuse that can be bugs.
In future versions, if there is cases that are not highlighted, they will be considerated as bugs, not breaking changes.
Use
raw()wrapping instead of_rawsuffixing by @TeXitoiThe syntax of raw attributes is changed to improve the syntax.
You have to change
foo_raw = "bar", baz_raw = "foo"byraw(foo = "bar", baz = "foo")orraw(foo = "bar"), raw(baz = "foo").New features
- Add
parse(from_occurrences)parser by @SergioBenitez - Support 1-uple enum variant as subcommand by @TeXitoi
- structopt-derive crate is now an implementation detail, structopt reexport the custom derive macro by @TeXitoi
- Add the
StructOpt::from_itermethod by @Kerollmops
Documentation
- Add
-
0.1.625 Nov 2017 -
0.1.514 Nov 2017 -
0.1.409 Nov 2017 -
0.1.301 Nov 2017 -
0.1.201 Nov 2017 -
0.1.122 Sep 2017 -
0.1.017 Jul 2017 -
0.0.516 Jun 2017 -
0.0.311 Feb 2017 -
0.0.210 Feb 2017Nothing published for this version
-
0.0.110 Feb 2017Nothing published for this version
-
0.0.003 Feb 2017Nothing published for this version