#vec #length #min #1

无需std vec1

一个保证至少包含1个元素的std Vec包装器

17个稳定版本

1.12.1 2024年5月25日
1.12.0 2024年3月27日
1.10.1 2022年10月21日
1.8.0 2021年3月21日
1.1.0 2018年7月24日

#62数据结构

Download history 17494/week @ 2024-04-28 14605/week @ 2024-05-05 16854/week @ 2024-05-12 17250/week @ 2024-05-19 15233/week @ 2024-05-26 17559/week @ 2024-06-02 20027/week @ 2024-06-09 17885/week @ 2024-06-16 19338/week @ 2024-06-23 17431/week @ 2024-06-30 17784/week @ 2024-07-07 21550/week @ 2024-07-14 19406/week @ 2024-07-21 22452/week @ 2024-07-28 20103/week @ 2024-08-04 21254/week @ 2024-08-11

84,075 每月下载量
用于 129 个crate (43个直接使用)

MIT/Apache

150KB
3K SLoC

vec1 Crates.io vec1 License License

此crate提供了一个具有类型保证的rust std::vec::Vec包装器,确保至少包含1个元素。如果您构建的API有时具有此类约束(例如,您需要至少一个目标服务器地址,但可以有更多),则非常有用。

示例

#[macro_use]
extern crate vec1;

use vec1::Vec1;

fn main() {
    // vec1![] makes sure there is at least one element
    // at compiler time
    //let names = vec1! [ ];
    let names = vec1! [ "Liz" ];
    greet(names);
}

fn greet(names: Vec1<&str>) {
    // methods like first/last which return a Option on Vec do
    // directly return the value, we know it's possible
    let first = names.first();
    println!("hallo {}", first);
    for name in names.iter().skip(1) {
        println!("  who is also know as {}", name)
    }
}

支持 serde::{Serialize, Deserialize}

Vec1类型支持serdeSerializeDeserialize特征,但此功能仅在您的项目的Cargo.toml文件中指定了"serde"功能标志时启用

# Cargo.toml

[dependencies]
vec1 = { version = "...", features = ["serde"] }

像docs.rs一样构建文档

要构建包含所有功能和包含函数需要哪些功能的提示的文档,请使用以下命令

RUSTDOCFLAGS="--cfg docs" cargo +nightly doc --all-features

这将记录所有功能并启用仅夜间的不稳定doc_auto_cfg功能。

许可

根据您的选择,受以下之一许可

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,应按上述方式双重许可,不附加任何其他条款或条件。

贡献者: ./CONTRIBUTORS.md

变更日志

查看 ./CHANGELOG.md

依赖关系

~185KB