-
Notifications
You must be signed in to change notification settings - Fork 152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for negative boolean flags #280
Comments
That would be By the way, there's such a request already, feel free to send a PR. |
As of today, you can also do the machinery by hand, I.e. creating a no-do-something flag on a do_something field, with a custom from_flag. I'm on mobile, I'll try to write such an example within the day. |
@CreepySkeleton I see. Thanks for the reply, and sorry for the spam! |
use structopt::StructOpt;
#[derive(Debug, StructOpt)]
struct Opt {
#[structopt(long = "no-verbose", parse(from_flag = std::ops::Not::not))]
verbose: bool,
}
fn main() {
let cmd = Opt::from_args();
println!("{:#?}", cmd);
} |
@TeXitoi awesome! Going to add it to my personal cookbook. That is exactly what I needed. Thank you very much! |
Example proposed in #281 |
* Automatic naming of fields and subcommands (#143) * Introduce smarter parsing of doc comments. (#146) * Fix invalid structopt syntax error message (#154) There was a typo preventing the probematic attr to be shown to the user. * Fix spelling: occurences -> occurrences, (#158) was found in comments and code, but required no user-facing API change. * Remove line-ending periods from short help. (#161) * Fix #168 * Support Option<Option<T>> field types (#190) * Support Option<Vec<T>> field type (#191) * Fix use of deprecated function * Fix some clippy lints * Update deprecated function and provide more info about the parsing error (#193) * Improve ChangeLog as suggested by @ErichDonGubler (#194) * [Casing] Change default from verbatim to kebab. (#204) .. fixes TeXitoi/structopt#202 * Use trybuild for testing expected proc macro errors (#205) * Custom attributes parser (#198) * update README.md for 0.3 fix #208 * Small fixes: clippy and typos (#215) * Add example for environment variables (#160) (#216) * Support skipping struct fields (#213) * Now error messages highlight the error location (#225) * Minor fixes * Change behavior of `about/author/version` and ad `no_version` * Emit error about `raw` removal * Update changelog * Update keyvalue example (#234) * Update documentation and changelog (#236) * Update dependencies (#227) * Bump minimum rustc version to 1.36 * Fix issues * Fix structopt-derive permissions (#239) * Fix #245 (#246) * Emit dummy impls on error (#248) * Fix changelog example (#250) * Do not call .verison() when CARGO_PKG_VERSION is not set * Update and improve docs * Propagate span info from origin code to generated code Most of `quote!` invocations are replaced with `quote_spanned!` ones. Now everywhere - sometimes it's pointless, sometimes we don't have any meaningless location to toke a span from, sometimes I just can't workaround the current implementation - too much changes. * Fix nightly tests * Do not mangle `author` string inside `<...>` * Support `skip = value` syntax * Fix code formatting * Fix nightly tests * Run ui tests only on stable * Add from_flag parser (#271) * Clarify docs and error messages (#277) * Fix parse for OptionVec (#279) ref pull #191 * Fix #269 and #265 (#278) * Pass the try_from_str functions a &str instead of a &String. (#282) In most cases this doesn't matter, as &String is coerced to a &str, but this fails for generic functions like CString::new. * Add an example of a negative flag (i.e. --no-verbose) Question from TeXitoi/structopt#280 * Fix #283 (#284) Fix #283 * Add `examples/README.md` and do some cleanup * Handle special types correctly * cargo clippy * Handle inter-expansion top-level args properly * Cleanup tests * Update proc-macro-error to v0.4 * Offer helpful suggestion on `raw(...)` error * Add `after_help` example * Prohibit positional `bool` args * Add tests/utils.rs * fixed typo, removed misleading doc * Remove CHANGELOG additions * Rust 2018 * Addressed review Co-authored-by: rnd <[email protected]> Co-authored-by: Robin Lambertz <[email protected]> Co-authored-by: florianjacob <[email protected]> Co-authored-by: Ted Driggs <[email protected]> Co-authored-by: Guillaume P. <[email protected]> Co-authored-by: Ivan Veselov <[email protected]> Co-authored-by: Owen Walpole <[email protected]> Co-authored-by: Robin Stocker <[email protected]> Co-authored-by: CreepySkeleton <[email protected]> Co-authored-by: Ophir LOJKINE <[email protected]> Co-authored-by: kpcyrd <[email protected]> Co-authored-by: Luiz F. A. de Prá <[email protected]> Co-authored-by: Andy Weiss <[email protected]> Co-authored-by: xiaoniu-578fa6bff964d005 <[email protected]> Co-authored-by: Mara Bos <[email protected]> Co-authored-by: Renê Couto e Silva <[email protected]>
@TeXitoi I have an question, can I use switching flag...?
Looking at an issue #320 and #126, it looks not implemented yet. |
It's not. But you can do with 2 field, a verbose and a quiet, and implement a getter on your struct that read the 2 fields to decide what to return. |
@TeXitoi |
Previously, this could only be specified with a value: --assume-in-transaction=true --assume-in-transaction=false I found prior art [1] for doing a boolean flag in structopt using two fields. It isn't as elegant as I would have hoped for, but one can now use: --assume-in-transaction --no-assume-in-transaction which is more common in my experience. [1]: TeXitoi/structopt#280.
Previously, this could only be specified with a value: --assume-in-transaction=true --assume-in-transaction=false I found prior art [1] for doing a boolean flag in structopt using two fields. It isn't as elegant as I would have hoped for, but one can now use: --assume-in-transaction --no-assume-in-transaction which is more common in my experience. [1]: TeXitoi/structopt#280.
Apologies if this is a duplicate or has already been requested -- but it would be nice to have a way to set a boolean flag which defaults to
true
unless it is given (e.g.--no-do-something
would set thedo_something
field tofalse
, otherwise it would betrue
)The text was updated successfully, but these errors were encountered: