1 个不稳定版本
0.0.1 | 2020 年 9 月 29 日 |
---|
#60 在 #owned
在 2 个包中使用 (通过 rhizome)
11KB
102 行
mapped-guard
可返回的守卫,例如表示原始借用的一部分。为标准守卫类型实现,易于扩展。
安装
请使用 cargo-edit 总是添加此库的最新版本
cargo add mapped-guard
示例
use core::{fmt::Debug, ops::Deref};
use mapped_guard::MapGuard as _;
use std::sync::Mutex;
#[derive(Debug)]
struct Wrapper(usize);
let wrapper_mutex = Mutex::new(Wrapper(0));
/// # Panics
///
/// Iff `wrapper_mutex` is poisoned.
fn lock_increment(wrapper_mutex: &Mutex<Wrapper>) -> impl '_ + Deref<Target = usize> + Debug {
let mut guard = wrapper_mutex.lock().unwrap();
guard.0 += 1;
guard.map_guard(|wrapper| &wrapper.0)
};
assert_eq!(
*lock_increment(&wrapper_mutex),
1
);
关于实现的说明
此库是一个权宜之计,直到映射守卫在标准库中可用,并使用内部装箱。
虽然对于许多守卫来说,在不装箱的情况下更高效地实现这一点在实践上是可能的,但除了文档明确说明为写入通路的可变借用之外,这并不安全。
许可证
许可协议为以下之一
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则任何有意提交以包含在你的作品中的贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,不附加任何额外条款或条件。
行为准则
变更日志
版本控制
mapped-guard
严格遵循 语义版本控制 2.0.0,但有以下例外
- 次要版本在主版本更改时不会重置为 0(除了 v1)。
将其视为全局功能级别。 - 修补版本在主版本或次要版本更改时不会重置为 0(除了 v0.1 和 v1)。
将其视为全局修补级别。
这包括上面指定的 Rust 版本要求。
更早的 Rust 版本可能兼容,但这可能随着次要或修补版本而改变。
受功能和修补影响的版本可以通过 CHANGELOG.md 中的相应标题确定。