This crate provides a proc macro to generate "let bindings" automatically,
usually cloning values into an expression(usually a closure). Inspired by
`crate enclose`.
# Syntax
`bind!( ( comma_separated_list_of_var_bindings ) the_expr_that_uses_the_vars )`
`comma_separated_list_of_var_bindings` is in the form of
`var_binding, another var_binding, ...`.
`var_binding` is in the form of:
1. `id`, generating `let id = id.clone();`
2. `mut id`, generating `let mut id = id.clone();`
3. `new_id = id`, generating `let new_id = id.clone();`
4. `mut new_id = id`, generating `let mut new_id = id.clone();`
5. `id = expr`, generating `let id = expr;`
6. `mut id = expr`, generating `let mut id = expr;`
7. `expr`, generating `let the_only_id_in_the_expr = expr;`,
e.g. `bind!( (s.to_owned()) .. )` generates `let s = s.to_owned()`.
8. `mut expr`, generating `let mut the_only_id_in_the_expr = expr;`
e.g. `bind!( (mut s.to_owned()) .. )` generates `let mut s = s.to_owned()`.