#vec #min #length #1

vec1

a std Vec wrapper assuring that it has at least 1 element

10 stable releases

1.8.0 Mar 21, 2021
1.6.0 Aug 11, 2020
1.5.1 Jul 1, 2020
1.5.0 May 21, 2020
1.0.1 Jun 12, 2018

#34 in Data structures

Download history 1316/week @ 2021-04-09 1374/week @ 2021-04-16 1230/week @ 2021-04-23 1484/week @ 2021-04-30 1815/week @ 2021-05-07 1757/week @ 2021-05-14 1791/week @ 2021-05-21 1645/week @ 2021-05-28 1520/week @ 2021-06-04 2107/week @ 2021-06-11 1650/week @ 2021-06-18 1261/week @ 2021-06-25 940/week @ 2021-07-02 1491/week @ 2021-07-09 1729/week @ 2021-07-16 1680/week @ 2021-07-23

5,183 downloads per month
Used in 21 crates (13 directly)

MIT/Apache

130KB
3K SLoC

vec1 Crates.io vec1 License License

This crate provides a rust std::vec::Vec wrapper with type guarantees to contain at least 1 element. This is useful if you build a API which sometimes has such constraints e.g. you need at least one target server address but there can be more.

Example

#[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)
    }
}

Support for serde::{Serialize, Deserialize}

The Vec1 type supports both of serde's Serialize and Deserialize traits, but this feature is only enabled when the "serde" feature flag is specified in your project's Cargo.toml file:

# Cargo.toml

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

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Contributors: ./CONTRIBUTORS.md

Change Log

See ./CHANGELOG.md

Dependencies

~205KB