[][src]Crate velcro

Velcro

Build Status

A set of macros for conveniently initializing collections from Rust's std and iterators. All of the macros support the unary .. operator which "spreads" the values of another collection or iterator.

velcro::vec! is a drop-in replacement for std::vec!. All functionality of the std macro is supported without overhead, but it also supports spreading values with the .. operator.

Examples

use velcro::{hash_map, iter, vec};

assert_eq!(vec![0, 1, ..(2..7)], vec![0, 1, 2, 3, 4, 5, 6]);

let other = vec![3, 4, 5];
assert_eq!(vec![0, 1, 2, ..&other, 6], vec![0, 1, 2, 3, 4, 5, 6]);

let whitespace = iter![' ', '\t', '\r', '\n'];
let map = hash_map! {
    ..('0'..='9'): "digit",
    ..('a'..='z'): "lower",
    ..('A'..='Z'): "upper",
    ..whitespace: "whitespace",
    '.': "punctuation",
    ',': "punctuation",
};

assert_eq!(map[&'x'], "lower");
assert_eq!(map[&'\r'], "whitespace");
assert_eq!(map[&'.'], "punctuation");

Contributing

Contributions are welcome! Check the Github issue tracker for issues marked with good first issue or help wanted for issues that are reasonably complete in their description. Feel free to ask for help or clarification by leaving comments on the issue.

This project uses Travis for continuous integration. Please check that your changes build and all of the tests pass:

  • https://travis-ci.com/github/peterjoel/velcro

Help

For help, questions or to report an issue, please use the Github issue tracker.

Macros

btree_map

An initializer for BTreeMap, allowing for entries to be specified individually or for the same value to be given to multiple keys using the .. operator.

btree_map_from

An initializer for BTreeMap that works the same as btree_map! except that values can be of any type that can be converted into the collection's item type via an Into implementation.

btree_set

An initializer for BTreeSet, allowing for items to be specified individually or "spread" using the .. operator.

btree_set_from

An initializer for BTreeSet that works the same as btree_set! except that values can be of any type that can be converted into the collection's item type.

hash_map

An initializer for HashMap, allowing for entries to be specified individually or for the same value to be given to multiple keys using the .. operator.

hash_map_from

An initializer for HashMap that works the same as hash_map! except that values can be of any type that can be converted into the collection's item type via an Into implementation.

hash_set

An initializer for HashSet, allowing for items to be specified individually or "spread" using the .. operator.

hash_set_from

An initializer for HashSet that works the same as hash_set! except that values can be of any type that can be converted into the collection's item type via an Into implementation.

iter

Creates an iterator, over the given values. Other collections and iterators may also be interspersed, or "spread", using the .. operator.

iter_from

Creates an iterator, over the given values. Works the same as iter except that values may be any type that can be converted to the iterator item type via an Into implementation.

linked_list

An initializer for LinkedList, allowing for items to be specified individually or "spread" using the .. operator.

linked_list_from

An initializer for LinkedList that works the same as linked_list! except that values can be of any type that can be converted into the collection's item type via an Into implementation.

map_iter

Creates an iterator over pairs of values, expressed with map-like syntax. Other collections and iterators may also be interspersed, or "spread", using the .. operator.

map_iter_from

Creates an iterator over pairs of values in the same way as map_iter except that values are converted into the expected type using an Into implementation.

vec

A more flexible vector initialization macro. velcro::vec! is a drop-in replacement for the built-in std::vec! macro, but with extra functionality. In particular, it adds the .. spread operator, which can insert multiple elements at once, provided that the expression implements IntoIterator, which is the case for all iterators and most collections.

vec_from

Works the same as vec! except that values may be of any type that can be converted into the item type via an implementation of Into.