#proc-macro #compare #derive #immutability #issue #traits #is-same

is-same-derive

为is-same crate提供衍生的过程宏

2个版本

0.1.1 2020年2月9日
0.1.0 2020年2月8日

#139 in #issue

MIT/Apache

3KB

is-same

Crates.io License: MIT/Apache-2.0 build Coverage Status

此crate提供IsSame特质,该特质专门用于比较已转换的不可变数据。此特质在一些重要方面与PartialEq不同

  • 浮点值通过它们的位模式进行比较,防止NaN值使数据结构永久性地比较为不相等。这还允许您检测值从-0.0变为0.0
  • 使用引用等价性来使比较更高效。该库假设Rc和Arc的内容是不可变的且不能改变,因此它们只需通过它们的指针进行比较。

此特质为许多标准库类型提供了开箱即用的实现,但如果缺少任何类型,请随时提交问题或贡献PR。有关错误消息或其他可用性问题(包括过程宏)的问题也欢迎!

显式未为此特质实现内部可变类型(Cell、RefCell、AtomicUSize、Mutex等),因为这会使基于引用等价性的假设变得不安全。如果将来出现问题,可能会进行更改。

安装

将以下内容添加到您的Cargo.toml

is-same = "0.1"
is-same-derive = "0.1"

用法

use is_same::IsSame;
use is_same_derive::IsSame;

#[derive(IsSame)]
struct MyStruct {
    text: String,
    foo: usize,
    bar: char,
}

fn diff(left: &MyStruct, right: &MyStruct) {
    println!("is_same? {}", left.is_same(right));
}

依赖

~1.5MB
~34K SLoC