10个稳定版本

1.5.3 2022年9月2日
1.5.1 2021年10月2日
1.4.1 2021年9月12日
1.4.0 2021年5月2日
1.3.0 2021年4月17日

过程宏 中排名第802

Download history 5896/week @ 2024-03-14 4937/week @ 2024-03-21 5186/week @ 2024-03-28 4697/week @ 2024-04-04 4866/week @ 2024-04-11 4531/week @ 2024-04-18 6777/week @ 2024-04-25 6579/week @ 2024-05-02 6279/week @ 2024-05-09 9502/week @ 2024-05-16 10059/week @ 2024-05-23 7762/week @ 2024-05-30 5847/week @ 2024-06-06 7155/week @ 2024-06-13 7020/week @ 2024-06-20 5485/week @ 2024-06-27

每月下载量26,737
29 个库中使用(通过 core_extensions

MIT/Apache

120KB
3.5K SLoC

Rust crates.io api-docs

许多标准/核心库类型/特质的扩展特质,以及其他杂项类型/特质/函数/宏。

添加依赖项

此库需要 cargo 特性以启用项目,要获取所有特性,可以使用

[dependencies.core_extensions]
version = "1.5"
features = [
    # enables items that use anything from the standard `std` or `alloc` crates.
    "std",
    # Requires the latest stable release, enables all the rust-version-dependent features
    "rust_latest_stable",
    # enables all the item features 
    "all_items",
]

"std" 特性是启用 impl 和使用 std 类型的项所必需的,否则仅支持 core 库。

"rust_latest_stable" 启用所有 "rust_1_*" 库特性以使用最新的稳定语言特性,这里列出了所有 "rust_1_*" 特性

"all_items" 启用此库中所有项的启用特性(在此处文档化

以下是上述配置的展开版本

[dependencies.core_extensions]
version = "1.5"
features = [
    "std",
    "rust_latest_stable"
    # all of the features below are what "all_items" enables
    "derive"
    "bools",
    "callable",
    "collections",
    "const_default",
    "const_val",
    "generics_parsing",
    "integers",
    "item_parsing",
    "iterators",
    "macro_utils",
    "marker_type",
    "on_drop",
    "option_result",
    "phantom",
    "self_ops",
    "slices",
    "strings",
    "transparent_newtype",
    "type_asserts",
    "type_identity",
    "type_level_bool",
    "void",
]

示例

展示此库的一些特性。

quasiconst,泛型常量。

quasiconst 宏允许通过生成一个实现了 ConstVal 特性的零大小泛型类型来模拟泛型常量,获取其值的首选方法是使用 getconst 宏。

以下示例展示了如何使用这些宏来声明一个泛型 VTABLE 常量。

use core_extensions::{getconst, quasiconst};

use std::fmt::{self, Debug};


quasiconst!{
    pub const VTABLE<T: Debug>: &'static Vtable = &Vtable {
        size: std::mem::size_of::<T>(),
        align: std::mem::align_of::<T>(),
        drop: drop_erased::<T>,
        fmt: debug_fmt_erased::<T>,
    };
}

fn main() {
    const VTABLE_U8: &'static Vtable = getconst!(VTABLE<u8>);
    assert_eq!(VTABLE_U8.size, 1);
    assert_eq!(VTABLE_U8.align, 1);

    const VTABLE_USIZE: &'static Vtable = getconst!(VTABLE<usize>);
    assert_eq!(VTABLE_USIZE.size, std::mem::size_of::<usize>());
    assert_eq!(VTABLE_USIZE.align, std::mem::align_of::<usize>());

    const VTABLE_STRING: &'static Vtable = getconst!(VTABLE<&str>);
    assert_eq!(VTABLE_STRING.size, std::mem::size_of::<usize>() * 2);
    assert_eq!(VTABLE_STRING.align, std::mem::align_of::<usize>());
}



pub struct Vtable {
    pub size: usize,
    pub align: usize,
    pub drop: unsafe fn(*mut ()),
    pub fmt: unsafe fn(*const (), &mut fmt::Formatter<'_>) -> fmt::Result,
}

unsafe fn drop_erased<T>(ptr: *mut ()) {
    std::ptr::drop_in_place(ptr as *mut T)
}

unsafe fn debug_fmt_erased<T>(ptr: *const (), f: &mut fmt::Formatter<'_>) -> fmt::Result 
where
    T: Debug,
{
    let this = unsafe{ &*(ptr as *const T) };
    
    Debug::fmt(this, f)
}

Cargo 特性

项目特性

项目特性使本仓库中的项可用。

"all_items" 特性启用所有这些特性,如果您不介意编译时间更长,则可以使用它代替下面的特性。

"all_items_no_derive" 特性除了禁用 "derive" 特性之外,启用了下面所有特性,以减少由于启用 syn 间接依赖而导致的编译时间。


启用 `"marker_type"` 功能。
  • "type_asserts":启用 type_asserts 模块,其中包括类型级别的断言,在测试中非常有用。

  • "type_identity":启用 TypeIdentity 特性,用于证明两种类型相等,并在泛型环境中在它们之间进行转换。

  • "type_level_bool":启用 type_level_bool 模块,它将 bool 编码在类型级别。

  • "void":启用 Void 类型,这是一个不能构造的类型,用于编码不可能的情况。

Rust 版本号

这些功能启用需要高于最小支持版本的 Rust 版本的代码。

  • "rust_1_46": 创建了与 TransparentNewtypeTypeIdentity 相关联的函数,这些函数可以将 Rc<Self>Arc<Self> 调用作为方法。

  • "rust_1_51": 启用 "rust_1_46" 功能,并为所有数组长度实现了特质。

  • "rust_latest_stable": 启用所有 "rust_1_*" 功能。这需要 Rust 的最新稳定版,因为可以在任何时候添加更多 "rust_1_*" 功能。

对其他包的支持

默认情况下都禁用

  • "std": 启用 std 库支持。隐含了 "alloc" 功能。

  • "alloc": 启用 alloc 库支持。

  • "serde_": 启用 serde 支持。

其他特性

"track_caller": 启用 "rust_1_46" 功能。将 ResultLike 修改为允许在 ResultLike::into_result_ 中获取调用者位置,并使 IsNoneError 存储其构造位置。

"docsrs": 用于在 docs.rs 中记录所需特性,需要 Rust 夜间版。本身不启用任何项目。

无 std 支持

此包默认在 #![no_std] 上下文中工作。

支持的 Rust 版本

此包支持 Rust 回到 1.41.0,需要 cargo 功能来使用较新版本的编程语言特性。

许可证

core_extensions 根据您的选择许可

Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的任何有意提交以包含在 core_extensions 中的贡献,将根据上述许可双重许可,不附加任何额外条款或条件。

依赖关系

~0–365KB