2个不稳定版本

0.2.0 2021年11月13日
0.1.0 2021年11月13日

#2421Rust模式

MIT/Apache

5KB
53

With-api

一组简单的宏,用于方便地缩小作用域。

为什么

在进行常见操作,如获取Mutex锁或打开文件时,很容易忘记在后续代码块的作用域内保持锁或文件处于打开状态。这个crate提供了一组简单的宏,受Python中的with语句启发,旨在

  • 缩小“关键”代码段,确保资源得到适当释放。
  • 提供一个熟悉的API,遵循Rust的所有权规则。
  • 易于记忆,因此易于使用。

示例

所有者

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.
});

无运行时依赖