1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//! Just a single macro. See below.

/// Create a statically allocated slice of any type.
///
/// This macro allows you to define static slices in much the same way as static strings.
///
/// ```
/// #[macro_use]
/// extern crate static_slice;
///
/// fn main() {
///     let static_string: &'static str = "yay!";
///     let static_u8s: &'static [u8] = static_slice![u8: 1, 2, 3];
/// }
/// ```
///
/// This can be useful for, e.g. returning lots of static slices in a match.
#[macro_export]
macro_rules! static_slice {
    ($_type:ty: $($item:expr),*) => ({
        static STATIC_SLICE: &'static [$_type] = &[$($item),*];
        STATIC_SLICE
    });
}

#[cfg(test)]
mod test {
    #[allow(unused)]
    fn fn_return() -> &'static [u8] {
        static_slice![u8: 1, 2, 3]
    }

    #[test]
    fn multiple_slices() {
        let s1 = static_slice![u8: 1, 2, 3];
        let s2 = static_slice![u8: 1, 2, 3, 4];
        assert_eq!(s1, &s2[..3]);
    }
}