21 个版本 (1 个稳定版)
1.0.0 | 2023年3月10日 |
---|---|
0.4.1 | 2022年7月17日 |
0.4.0 | 2022年2月20日 |
0.3.0 | 2021年6月8日 |
0.2.6 | 2020年7月13日 |
#88 在 开发工具 中
226,304 每月下载次数
在 110 个crate(42 个直接) 中使用
90KB
1.5K SLoC
duplicate
用于轻松实现带替换的代码复制的crate。
动机
如果您发现自己需要复制一段代码并对新用例进行一些小改动,那么这个crate就适合您。
duplicate_item
属性宏可以在任何数量的重复中复制一个项目,同时在每个重复的位置插入自定义代码。类似函数的 duplicate
宏可以对您提供的任何代码执行相同的操作。
有关语法和功能的详细介绍,请参阅文档。
示例
use duplicate::duplicate_item;
/// Trait we want to implement for u8, u16, and u32
trait IsMax {
/// Returns true if self is its maximum possible value.
fn is_max(&self) -> bool;
}
#[duplicate_item(
int_type max_value;
[ u8 ] [ 255 ];
[ u16 ] [ 65_535 ];
[ u32 ] [ 4_294_967_295 ];
)]
impl IsMax for int_type {
fn is_max(&self) -> bool {
*self == max_value
}
}
assert!(!42u8.is_max());
assert!(!42u16.is_max());
assert!(!42u32.is_max());
展开为
use duplicate::duplicate_item;
/// Trait we want to implement for u8, u16, and u32
trait IsMax {
/// Returns true if self is its maximum possible value.
fn is_max(&self) -> bool;
}
impl IsMax for u8 {
fn is_max(&self) -> bool {
*self == 255
}
}
impl IsMax for u16 {
fn is_max(&self) -> bool {
*self == 65_535
}
}
impl IsMax for u32 {
fn is_max(&self) -> bool {
*self == 4_294_967_295
}
}
assert!(!42u8.is_max());
assert!(!42u16.is_max());
assert!(!42u32.is_max());
MSRV 策略
本crate的最低支持Rust版本(MSRV)取决于启用了哪些功能。
基本MSRV为1.42。当没有启用任何功能时适用,是最低可能的MSRV。启用以下功能将MSRV提高至指定版本
当前没有功能会增加MSRV超过基本版本。
启用上述列表之外的功能不会增加MSRV。
提高基本MSRV或任何特定现有功能的MSRV将是一个破坏性变更,并将伴随着主要版本的升级。添加新功能不算作破坏性变更,即使它们默认启用并因此提高了默认功能的累积MSRV。
只能保证本crate的直接和传递依赖项的最小版本与MSRV兼容。
变更日志
本项目遵循语义化版本控制。在初始开发过程中(版本为0.y.z),次要版本(y)的升级表示破坏性变更。
变更
- 重写了
pretty_errors
功能,以更一致地提供有用的提示和代码高亮。请参阅#19。
修复
duplicate
现在还替换了嵌套duplicate
的调用。请参阅#48。- 现在忘记将替换参数括起来会报告合理的错误。请参阅 #30。
- 简短语法不再接受在标识符列表之后不提供替换组。请参阅 #29。
- 修复了多个应该不被接受的代码接受的问题。
此更改日志格式基于 Keep a Changelog,并仅显示自上一版本以来的更改。 查看完整的更改日志以了解所有发布版本的更改。