#guard #reference #owned #map

mapped-guard

可返回的守卫,例如表示原始借用的一部分。为标准守卫类型实现,易于扩展。

1 个不稳定版本

0.0.1 2020 年 9 月 29 日

#60#owned


2 个包中使用 (通过 rhizome)

MIT/Apache

11KB
102

mapped-guard

Lib.rs Crates.io Docs.rs

Rust 1.40.0 Build Status Crates.io - License

GitHub open issues open pull requests crev reviews

可返回的守卫,例如表示原始借用的一部分。为标准守卫类型实现,易于扩展。

安装

请使用 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 许可证定义,应按上述方式双许可,不附加任何额外条款或条件。

行为准则

变更日志

版本控制

mapped-guard 严格遵循 语义版本控制 2.0.0,但有以下例外

  • 次要版本在主版本更改时不会重置为 0(除了 v1)。
    将其视为全局功能级别。
  • 修补版本在主版本或次要版本更改时不会重置为 0(除了 v0.1 和 v1)。
    将其视为全局修补级别。

这包括上面指定的 Rust 版本要求。
更早的 Rust 版本可能兼容,但这可能随着次要或修补版本而改变。

受功能和修补影响的版本可以通过 CHANGELOG.md 中的相应标题确定。

无运行时依赖