conditional-assignment
This is a very simple, small crate to help make conditional assignments more ergonomic.
Minimum Supported Rust Version (MSRV)
According to cargo-msrv, the MSRV
is 1.56.1
. Given how simple this crate is, I wouldn't be surprised if the
MSRV is lower, but I didn't check. Try it!
Why
Sometimes this:
let outcome = condition.pick
looks better than this:
let outcome = if condition else
Examples
Below are a few examples. See tests for more. These are just
examples to show the concept. If you find yourself nesting lots of pick
s,
there is probably a better/prettier way. Chaining pick
s seems better, but
still within reason. In some situations map
makes more sense.
// Bring the trait into scope so you can use it.
use ConditionalAssignment;
// Return a response string depending on whether
// the bool is true or false.
// Determine if a number is a multiple of 2, 3, and 5.
// Get whether a &str is lowercase and get its length.
// If the &str is none, returns (None, None).
// If the &str is empty, return (None, Some(0)).
// If the &str is not empty, return (Some(<is lowercase>), Some(<length>)).
// ...
// Except not really! `a.unwrap()` can panic, because it gets evaluated before
// we know that the `Option<&str>` is `Some(&str)`
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.