10个版本
0.2.2 | 2023年8月13日 |
---|---|
0.2.1 | 2023年8月13日 |
0.1.6 | 2023年4月4日 |
0.1.2 | 2023年3月29日 |
254 在 Rust模式 中
每月下载量 99,498
在 735 个crate中(12个直接) 使用
54KB
1.5K SLoC
qualifier_attr
为各种项目添加“修饰符”的过程宏属性。
目前,该crate支持以下“修饰符”
pub
,pub(crate)
等. - 可见性和限制default
- 默认实现(专业化 的功能)async
- 异步代码,例如async fn
unsafe
- 不安全代码,例如unsafe fn
,unsafe trait
const
- 可在编译时运行的代码,例如const fn
extern "ABI"
- 指定ABI,例如extern "C" fn
限制
- 似乎当属性与模块一起使用时,rust-analyzer有时会抱怨。
示例
#[macro_use]
extern crate qualifier_attr;
// We can add a qualifier to a function
// with an attribute.
#[qualifiers(const)]
fn const_fn() -> u32 {
42
}
const CONST_RES: u32 = const_fn();
// It's not so impressive on its own,
// but with `cfg_attr`, it can be conditional.
#[cfg_attr(feature = "extern_c", no_mangle, qualifiers(pub, extern "C"))]
fn extern_c_fn() -> u32 {
42
}
// It even works with types, imports, and more!
mod foo {
#[qualifiers(pub)]
struct Foo {
x: i32,
y: i32,
}
}
#[qualifiers(pub)]
use foo::Foo;
// Traits and implementations too!?
#[cfg_attr(feature = "unsafe_quux", qualifiers(unsafe))]
trait Quux {
fn quux_the_thing();
}
#[cfg_attr(feature = "unsafe_quux", qualifiers(unsafe))]
impl Quux for Foo {
fn quux_the_thing() {
println!("The thing was quuxed.");
}
}
// You can add qualifiers to the fields of a
// struct as well with this special attribute.
#[field_qualifiers(x(pub), y(pub))]
struct Point2 {
x: i32,
y: i32,
}
#[field_qualifiers(_0(pub), _1(pub), _2(pub))]
struct Point3(i32, i32, i32);
在此处了解更多关于 cfg_attr
的信息。
关于旧属性的通知
在版本0.2.0之前,该crate为每种类型的项提供了一个单独的属性。虽然这通常会对编译时间产生小小的提升,但它通常不能由额外的复杂性来证明。旧属性仍然可以通过默认的 legacy_attrs
功能标志使用,但当前不鼓励使用。要禁用旧属性,请将以下内容添加到您的 Cargo.toml
[dependencies]
qualifier_attr = { version = "0.2", default-features = false }
类似的crate
许可证
根据您的选择,本软件受以下任一许可证的许可:Apache License, Version 2.0 或 MIT 许可证。除非您明确表示否则,根据 Apache-2.0 许可证定义,您有意提交的任何贡献,包括在本软件包中,应双重许可如上所述,且不附加任何额外条款或条件。
依赖项
约280–730KB
约17K SLoC