https://github.com/rustonaut/vec1
Rust `Vec<T>` wrapper that gurantees to contain at least 1 element
https://github.com/rustonaut/vec1
collections data-structures vec
Last synced: 7 months ago
JSON representation
Rust `Vec<T>` wrapper that gurantees to contain at least 1 element
- Host: GitHub
- URL: https://github.com/rustonaut/vec1
- Owner: rustonaut
- License: apache-2.0
- Created: 2018-01-16T15:41:24.000Z (almost 8 years ago)
- Default Branch: nightly
- Last Pushed: 2024-05-25T18:01:08.000Z (over 1 year ago)
- Last Synced: 2024-10-31T21:02:30.343Z (12 months ago)
- Topics: collections, data-structures, vec
- Language: Rust
- Homepage:
- Size: 211 KB
- Stars: 90
- Watchers: 5
- Forks: 15
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
vec1 [](https://crates.io/crates/vec1) [](https://docs.rs/vec1) [](https://opensource.org/licenses/MIT) [](https://opensource.org/licenses/Apache-2.0)
=============
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
--------
```rust
#[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`](https://serde.rs/)'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:
```toml
# Cargo.toml
[dependencies]
vec1 = { version = "...", features = ["serde"] }
```
Building docs like on docs.rs
-------------
To build docs which document all features and contains hints
which functions require which features use following command:
```sh
RUSTDOCFLAGS="--cfg docs" cargo +nightly doc --all-features
```
This will document all features and enable the unstable
nightly only `doc_auto_cfg` feature.
License
--------
Licensed under either of
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
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](./CONTRIBUTORS.md)
Change Log
-----------
See [./CHANGELOG.md](./CHANGELOG.md)