A micro crate that simplifies a bit the use of the std macro thread_local!
.
```rust extern crate regex;
use withthreadlocal::withthreadlocal; use regex::Regex;
let user_input = "cat";
let (isapet, needsawalk) = withthreadlocal! { static REGEXPET: Regex = Regex::new(r"cat|dog").unwrap(); static REGEXWALK: Regex = Regex::new(r"dog").unwrap();
{
let is_a_pet = REGEX_PET.is_match(user_input);
let needs_a_walk = REGEX_WALK.is_match(user_input);
(is_a_pet, needs_a_walk)
}
};
assert!(isapet && !needsawalk); ```
You can also use its variant move
to move variables inside the block. Though I admit I could
not write a good example:
```rust extern crate regex;
use withthreadlocal::withthreadlocal; use regex::Regex;
let user_input = vec!["cat", "love", "dog"];
let output = withthreadlocal! { static REGEX_PET: Regex = Regex::new(r"cat|dog").unwrap();
move {
user_input
.into_iter()
.filter(|s| REGEX_PET.is_match(s))
.collect::<Vec<_>>()
}
};
assert_eq!(output, ["cat", "dog"]); ```