Rust Latest Version Rust 1.46+ License Docs.rs LOC Dependency Status

with-thread-local

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"]); ```