vector

Macro vector 

Source
vector!() { /* proc-macro */ }
Expand description

Creates a vector of type Vector<T> from the elements.

§Examples

Initialize a vector with some numbers:

use col_proc_macros::vector;
type Vector<T> = Vec<T>;
 
let vec = vector![1, 2, 3,];
assert_eq!(vec, [1, 2, 3]);

Initialize a vector with a large number of repeated elements:

// writing an equivalent code with normal syntax would be insane
let vec = vector![1; 10000];
assert_eq!(vec, &[1; 10000][..]);

Initialize a multi-dimensional vector:

let vec = vector![
          vector![1, 2, 3],
          vector![4, 5, 6],
          vector![7, 8, 9]];
assert_eq!(vec[1][2], 6);

Rapidly annotate the type of the vector elements in any context with <elements>: <type> syntax:

let vector = vector![Default::default(), Default::default(): i32,];
assert_eq!(vector, [0, 0]);

The type must go at the last element or will be parsed as-is and rustc will fail with the message type ascription is experimental,as such,this syntax it’s influenced by that language feature being the only equivalent which have the same result.

The Vector<T> type should have the following methods:

  1. with_capacity to allocate a vector with so capacity as elements.
  2. as_mut_ptr to move the elements to the vector from an array.
  3. set_len to set the length.
  4. push when the length it’s not encoded in [elem; length].

It’s worth to mention that,like [vec!],the resulting length must not overflow the stack because the macro declares an array and then moves the elements to the vector.