Crates.io | with-api |
lib.rs | with-api |
version | 0.2.0 |
source | src |
created_at | 2021-11-13 11:47:18.345614 |
updated_at | 2021-11-13 12:10:32.630708 |
description | Simple macro for shrinking scope |
homepage | |
repository | https://github.com/E3uka/with-api/ |
max_upload_size | |
id | 481357 |
size | 5,813 |
A simple set of macros for the ergonomic shinking of scope.
When doing common operations such as acquiring a Mutex lock or opening a file it can be easy to forget that the lock is held or the file is open for the entirety of the following blocks scope. This crate provides a simple set of macros, influenced by the with statement in Python, that aims to:
use with_api::with;
let mine = "all mine".to_string();
with!(mine, |greedy| {
assert!(!greedy.is_empty());
});
// The below fails as its been moved into with!
// println!("{:?}", mine);
use with_api::bor_with;
let immutable: usize = 27;
bor_with!(immutable, |num| {
assert!(*num == 27);
// The below fails as it cannot be mutated.
// *num = 28;
});
use with_api::mut_with;
let protec: Mutex<HashMap<usize, String>> =
Mutex::new(Vec::new().into_iter().collect());
mut_with!(protec.lock().unwrap(), |db| {
let _ = db.insert(42, "meaning of life".to_string());
assert!(!db.is_empty());
// lock released at end of scope.
});